閱讀970 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JAVA賦值DEMO分析

對主數據類型的賦值是非常直接的。由於主類型容納了實際的值,而且並非指向一個對象的句柄,所以在為其賦值的時候,可將來自一個地方的內容複製到另一個地方。

例如,假設為主類型使用“A=B”,那麼B處的內容就複製到A。若接著又修改了A,那麼B根本不會受這種修改的影響。

 

但在為對象“賦值”的時候,情況卻發生了變化。對一個對象進行操作時,我們真正操作的是它的句柄。所以倘若“從一個對象到另一個對象”賦值,實際就是將句柄從一個地方複製到另一個地方。

這意味著假若為對象使用“C=D”,那麼C 和D最終都會指向最初隻有 D 才指向的那個對象。

 

 

 

class Number{
	int i;
}

public class test{
	public static void main(String[] args){
		Number n1=new Number();
		Number n2=new Number();
		n1.i=9;
		n2.i=47;
		System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i);
		n1=n2;//取右邊的值,把它賦值到左邊
		//n1.i=n2.i;//保留兩個獨立的對象,二不是將n1和n2綁定到相同的對象
		//改變n1的同時也改變了n2,無論n1還是n2都包含了相同的句柄,它指向相同的對象
		//最初的句柄位於n1內部,指向容乃了值9的一個對象。在賦值過程中,那個句柄實際已經丟失;它的對象會有“垃圾收集器”自動清除
		System.out.println("2:n1.i:"+n1.i+",n2.i:"+n2.i);
		n1.i=27;
		System.out.println("3:n1.i:"+n1.i+",n2.i:"+n2.i);
	}
	
} 


輸出結果:

1:n1.i:9,n2.i:47
2:n1.i:47,n2.i:47
3:n1.i:27,n2.i:27

class Number{
	int i;
}

public class test{
	public static void main(String[] args){
		Number n1=new Number();
		Number n2=new Number();
		n1.i=9;
		n2.i=47;
		System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i);
		//n1=n2;//取右邊的值,把它賦值到左邊
		n1.i=n2.i;//保留兩個獨立的對象,二不是將n1和n2綁定到相同的對象
		//改變n1的同時也改變了n2,無論n1還是n2都包含了相同的句柄,它指向相同的對象
		//最初的句柄位於n1內部,指向容乃了值9的一個對象。在賦值過程中,那個句柄實際已經丟失;它的對象會有“垃圾收集器”自動清除
		System.out.println("2:n1.i:"+n1.i+",n2.i:"+n2.i);
		n1.i=27;
		System.out.println("3:n1.i:"+n1.i+",n2.i:"+n2.i);
	}
	
} 


輸出結果:

1:n1.i:9,n2.i:47
2:n1.i:47,n2.i:47
3:n1.i:27,n2.i:47

最後更新:2017-04-02 06:52:04

  上一篇:go 觸動人心:如何設計優秀的iPhone應用
  下一篇:go 必知必會 - 邁向卓越