JAVA程式設計思想(第4版)賦值小結
阿新 • • 發佈:2018-12-30
賦值使用操作符“=”。對基本資料型別的賦值是很簡單的。基本資料型別儲存了實際的數值,而並非指向一個物件的引用,所以在為其賦值的時候,是直接將一個地方的內容複製到了另一個地方。例如:對基本資料型別使用a=b,那麼b的內容複製給了a。若接著修改了a,b根本不會受到影響。
但是在為物件賦值的時候,情況不一樣。比如對物件使用c=d,那麼c和d都指向原本只有d指向的那個物件,舉個例子:建立Area類
package test;
public class Area {
int a;
}
main函式:package test; public class Test { public static void main(String args[]) { Area r1=new Area(); Area r2=new Area(); r1.a=1; r2.a=2; System.out.println("1:r1.a:"+r1.a+" r2.a:"+r2.a); r1=r2; System.out.println("2:r1.a:"+r1.a+" r2.a:"+r2.a); r1.a=3; System.out.println("3:r1.a:"+r1.a+" r2.a:"+r2.a); } }
在main函式裡面建立了Area的倆個例項,然後給r1,r2分別賦值1,2。在控制檯打印出r1.a,r2.a。然後將r2賦值給r1,然後修改r1, 再分別列印r1.a,r2.a。 結果如下圖: 因為賦值操作的是一個物件的引用,所以修改r1的時候同時修改了r2。 這是因為r1和r2包含了相同的引用,同時指向了相同的物件。(原本r1包含了對物件的引用,是指向一個值為1的物件。在對r1賦值的時候,這個引用被覆蓋,即現在指向一個r2指向的物件,而那個不再被引用的物件被“垃圾回收器“自動清理)。 這種現象被稱為別名現象。我們可以採用r1.a=r2.a來賦值,這樣r1,r2就不用繫結到相同的物件,但是這樣違背了JAVA面向物件程式設計的思想,因為它直接操作了物件中的域。同樣在方法呼叫中也會出現別名問題。