1. 程式人生 > >JAVA程式設計思想(第4版)賦值小結

JAVA程式設計思想(第4版)賦值小結

賦值使用操作符“=”。對基本資料型別的賦值是很簡單的。基本資料型別儲存了實際的數值,而並非指向一個物件的引用,所以在為其賦值的時候,是直接將一個地方的內容複製到了另一個地方。例如:對基本資料型別使用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面向物件程式設計的思想,因為它直接操作了物件中的域。同樣在方法呼叫中也會出現別名問題。