2013-09-23 118 views
3

在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

+1

忘掉指针 - Java中没有这种东西! 'y = 20'与'y = Integer.valueOf(20)'相同,所以'y'之后引用了一个不同的对象。 –

回答

3

以下:

y=20; 

重新绑定y指向一个不同的Integer对象。

它不碰x,所以它的值不会改变。

+0

所以java总是重新绑定到不同的对象?无论如何去解决这个问题? –

+0

@fadytaher:对可变类的同一个实例有很多引用。 – jlordo

1

每当你看到代码的形式

Integer x = 5; 

编译器通过类似

Integer x = Integer.valueOf(5); 

替换它,这几乎类似于

Integer x = new Integer(5); 

所以事实上,y = 20是没有什么比y = new Integer(20),所以y指针是relocat编辑指向一个新创建的Integer对象。

1

在第一行Integer x=5;x是参考到整数对象与5.值。然后Integer y=x;创建针对同一对象的另一参考,所以xy指相同的对象。最后,y=20;使基准y指向一个不同的对象,价值20

Integer从“Java编程语言,第4版”,由肯·阿诺德,詹姆斯·高斯林和大卫·霍姆斯:

Java编程语言不会通过引用传递对象;它通过值传递对象引用。因为同一个引用的两个副本引用同一个实际对象,所以通过一个引用变量所做的更改通过另一个引用变量可见。

但在你的情况下,你实际上并没有修改初始对象,而是改变了它的一个引用来指向一个不同的对象。