在Java中,我们可以使用包装类来声明变量。 例如
Integer x=5;
这意味着有一个引用'x'指向值5。
然后我宣布另一个名为y的引用指向相同的值
Integer y=x; //now y should point to the number "5"
然后我改变了y指向
的值 y=20;
这不会使x和y都指向20吗? 因为当我打印x时,我仍然得到5
答案 0 :(得分:3)
以下内容:
y=20;
重新绑定y
以指向不同的Integer
对象。
它不会触及x
,因此其值不会改变。
答案 1 :(得分:1)
每次看到表格中的代码
Integer x = 5;
编译器将其替换为类似
的内容Integer x = Integer.valueOf(5);
与
几乎相似Integer x = new Integer(5);
事实上,y = 20
只不过是y = new Integer(20)
,所以y指针被重新定位为指向新创建的Integer对象。
答案 2 :(得分:1)
在第一行Integer x=5;
x
是对值为5的Integer对象的引用。然后Integer y=x;
为同一对象创建另一个引用,因此x
和y
引用同一个对象。最后,y=20;
使引用y
指向另一个对象,值{20}的Integer
。
来自Ken Arnold,James Gosling和David Holmes的“Java编程语言,第4版”:
Java编程语言不通过引用传递对象;它按值传递对象引用。因为同一引用的两个副本引用相同的实际对象,所以通过一个引用变量进行的更改可以通过另一个引用变量。
但是在你的情况下,你实际上并没有修改初始对象,而是将其中一个引用更改为指向另一个对象。
答案 3 :(得分:0)
$ ./bin/base16decode aaff
hex value: aaff
result : aaff
binary : 1010101011111111
上面的语句分配一个存储空间,该存储空间保留值5,并由x引用;
Integer x = 5
上面的语句将引用y指向与x相同的内存位置。
当您将值分配给y = 20时。这将创建一个新的存储空间,该存储空间保存值20,并由y引用。因此,此时x和y都指向不同的内存位置。