在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'之後引用了一個不同的對象。 –