2013-09-23 124 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編程語言不會通過引用傳遞對象;它通過值傳遞對象引用。因爲同一個引用的兩個副本引用同一個實際對象,所以通過一個引用變量所做的更改通過另一個引用變量可見。

但在你的情況下,你實際上並沒有修改初始對象,而是改變了它的一個引用來指向一個不同的對象。