對象的賦值和普通賦值的區別

/*
 * 賦值,主要是區別對象的賦值和普通賦值的區別
 * 對主數據類型的賦值是非常直接的。由於主類型容納了實際的值,而且並非指向一個對象的句柄,
 * 所以在爲其賦值的時候,可將來自一個地方的內容複製到另一個地方。例如,假設爲主類型使用“A=B”,
 * 那麼B處的內容就複製到A。若接着又修改了A,那麼B根本不會受這種修改的影響。作爲一名程序員,這應成爲自己的常識。
 * 但在爲對象“賦值”的時候,情況卻發生了變化。對一個對象進行操作時,我們真正操作的是它的句柄。
 * 所以倘若“從一個對象到另一個對象”賦值,實際就是將句柄從一個地方複製到另一個地方。這意味着假若爲對象使用“C=D”,
 * 那麼C和D最終都會指向最初只有D才指向的那個對象。下面這個例子將向大家闡示這一點。
 * 看來改變n1的同時也改變了n2!這是由於無論n1還是n2都包含了相同的句柄,
 * 它指向相同的對象(最初的句柄位於n1內部,指向容納了值9的一個對象。
 * 在賦值過程中,那個句柄實際已經丟失;它的對象會由“垃圾收集器”自動清除)。
 * 這種特殊的現象通常也叫作“別名”,是Java操作對象的一種基本方式。
 * 但假若不願意在這種情況下出現別名,又該怎麼操作呢?可放棄賦值,並寫入下述代碼:
 * n1.i = n2.i;
 * 這樣便可保留兩個獨立的對象,而不是將n1和n2綁定到相同的對象。但您很快就會意識到,這樣做會使對象內部的字段處理髮生混亂,並與標準的面向對象設計準則相悖。
 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章