在Java中,我们可以使用包装类来声明变量。 例如使用Java包装类声明变量
Integer x=5;
这意味着有一个参考的“x”指向的5
然后一个值I声明的另一个参考称为ÿ指向相同的值
Integer y=x; //now y should point to the number "5"
然后我其中Y点的值改为
y=20;
不这使x和y指向20? 因为当我打印X,我仍然得到5
在Java中,我们可以使用包装类来声明变量。 例如使用Java包装类声明变量
Integer x=5;
这意味着有一个参考的“x”指向的5
然后一个值I声明的另一个参考称为ÿ指向相同的值
Integer y=x; //now y should point to the number "5"
然后我其中Y点的值改为
y=20;
不这使x和y指向20? 因为当我打印X,我仍然得到5
以下:
y=20;
重新绑定y
指向一个不同的Integer
对象。
它不碰x
,所以它的值不会改变。
所以java总是重新绑定到不同的对象?无论如何去解决这个问题? –
@fadytaher:对可变类的同一个实例有很多引用。 – jlordo
每当你看到代码的形式
Integer x = 5;
编译器通过类似
Integer x = Integer.valueOf(5);
替换它,这几乎类似于
Integer x = new Integer(5);
所以事实上,y = 20
是没有什么比y = new Integer(20)
,所以y指针是relocat编辑指向一个新创建的Integer对象。
在第一行Integer x=5;
x
是参考到整数对象与5.值。然后Integer y=x;
创建针对同一对象的另一参考,所以x
和y
指相同的对象。最后,y=20;
使基准y
指向一个不同的对象,价值20
的Integer
从“Java编程语言,第4版”,由肯·阿诺德,詹姆斯·高斯林和大卫·霍姆斯:
Java编程语言不会通过引用传递对象;它通过值传递对象引用。因为同一个引用的两个副本引用同一个实际对象,所以通过一个引用变量所做的更改通过另一个引用变量可见。
但在你的情况下,你实际上并没有修改初始对象,而是改变了它的一个引用来指向一个不同的对象。
忘掉指针 - Java中没有这种东西! 'y = 20'与'y = Integer.valueOf(20)'相同,所以'y'之后引用了一个不同的对象。 –