0

我们的大学教授上周在我们的计算机科学课上向我们展示了这个视频。我们正在使用的语言是 java(我不确定其他语言的情况)

http://www.youtube.com/watch?v=6pmWojisM_E

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

其他语言怎么样(出于兴趣)?

4

3 回答 3

0

在 java 中,它只会分配一个新的局部变量,与 'original' 完全分开x。你做什么y不影响x,反之亦然。

请注意,在 C / C++ 中,它与声明两个类型的变量int(而不是int*/ int&)相同。

我知道的每种语言都支持值语义,为了获得引用语义(“两个变量相互连接”),语言应该支持原语的引用/指针语义。

于 2013-10-19T07:02:47.290 回答
0

The video shows how if we have a int x and set it to 50, and then we create a new int y and set it to x, y and x will point to the same location.

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

anint*指的是内存中存储 an 的某个位置int。像 c 和 c++ 这样的语言允许您直接读取变量的地址,并更新存储在那里的内容。

// c and c++
int x = 5;
int* y = &x;
*y = 6;
printf("%d\n", x); // <-- will print 6 

Java 不允许我们对原始类型执行此操作。你描述了这样的事情:

// java
int x = 5;
int y = x;
y = 6;
System.out.println(x); // <-- will print 5

x将保持不变。

于 2013-10-19T07:05:51.847 回答
0

该视频展示了指针如何在 C 语言中工作,而不是在 Java 中。

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

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

于 2013-10-19T07:09:01.880 回答