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