Java指针->;指的是视频

Java指针->;指的是视频,java,pointers,Java,Pointers,我们的大学教授上周在计算机科学课上给我们看了这段视频。我们正在使用的语言是java(对于其他语言,我不确定这一点) 视频显示了如果我们有一个int x并将其设置为50,然后我们创建一个新的int y并将其设置为x,y和x将指向相同的位置。我的问题是,在java中,它对原始数据类型的工作方式是否有所不同?我知道对象都是使用指针存储的,但对于int、char等基本数据类型,它是否仍然使用相同的规则?通过做int x=1;int y=x,它会让x和y指向同一个位置,还是会创建一个新的int存储在内存

我们的大学教授上周在计算机科学课上给我们看了这段视频。我们正在使用的语言是java(对于其他语言,我不确定这一点)

视频显示了如果我们有一个int x并将其设置为50,然后我们创建一个新的int y并将其设置为x,y和x将指向相同的位置。我的问题是,在java中,它对原始数据类型的工作方式是否有所不同?我知道对象都是使用指针存储的,但对于int、char等基本数据类型,它是否仍然使用相同的规则?通过做int x=1;int y=x,它会让x和y指向同一个位置,还是会创建一个新的int存储在内存中并保存为y


其他语言如何(不感兴趣)?

在java中,它只会分配一个新的局部变量,与“原始”
x
完全分离。您在
y
上的操作不会影响
x
,反之亦然

<注意>在C/C++中,它与声明类型<代码> int >(而不是代码> int */COD>/<代码> int和<代码>)相同。
我所知道的每种语言都支持值语义,为了获得引用语义(“两个变量相互连接”),该语言应该支持原语的引用/指针语义。

视频显示了如果我们有一个int x并将其设置为50,然后我们创建一个新的int y并将其设置为x,y和x将指向同一位置。

不完全是..它说的是
int*
,而不是
int

int*
是指内存中存储
int
的某个位置。像C和C++这样的语言允许你直接读取变量的地址,并更新存储在那里的内容。
// c and c++
int x = 5;
int* y = &x;
*y = 6;
printf("%d\n", x); // <-- will print 6 
<代码> //c和C++ int x=5; int*y=&x; *y=6;
printf(“%d\n”,x);// 视频展示了指针如何在C语言中工作,而不是在Java中

在Java中,正如您在文章中提到的,基本数据类型使用值的副本,而对象类型使用对象引用的副本。因此,之后更改引用不会影响第一个引用,但在该引用的所有副本的末尾只有一个对象。更改is对象会影响所有引用,然后


使用字符串时要小心。由于此类使用字符串常量池,因此字符串str1=“Hello world”和字符串str2=str1可能在内存中引用了相同的字符串常量,但不能确定这一点。

谢谢您的澄清。我不确定这是否意味着什么重要的事情。我们也会这样做:int x=6;int y=x;完全相同(就计算机执行它的方式而言):int x=6;int y=6@user2249516是的,
*
对于这类事情非常重要。@user2249516是的——它们只是运行时堆栈上碰巧具有相同值的两个不同变量。
// java
int x = 5;
int y = x;
y = 6;
System.out.println(x); // <-- will print 5