每天都在變化,每天都在進步基礎情況
a a=new a();
a a; //建立了個a 型別的引用a,此時指向null
new a(); //在堆中建立了乙個類a的物件,返回其引用位址
= //將物件的位址給予引用
情景1
a a=new a();//(01)
a b=a
;//(02)
a=null
;//(03)
此時b仍然有資料,因為(02)的時候,發生了複製行為,引用發生了複製,也就是此時a,b 同時指向了(01)的時候建立的物件,此時即使執行了(03),原有的內容仍在,b的引用仍然在。
情景2
public
void
test(a test)
a a=new a();//(01)
test(a); //(02)
結論: (01)步驟的a引用仍是原來的,並沒因為(02 )發生變化,因為方法傳參的時候也發生了引用的複製,所以此時(02),對第二個test引用進行了修改並不影響(01)的內容
情景3
public
void
test(a test)
a a=new a();//(01)
test(a); //(02)
結論:此時a的引用物件內容改變,因為引用和複製後的引用都指向相同的物件,此時會發生變化
情景4對於list、map 是等同的
a
a=new a();
list test=new arraylist<>();
test.add(a);
a=null;
結論:這個情況和情景2類似,發生了方法傳參
總結:對於物件引用來說 「=」 和傳參會導致引用複製,此時就相當於多個引用對應於乙個物件,此時其中的乙個引用更換引用或者設定為null並不會影響其他的引用,如果修改了物件,則對於所有引用,其內容都是一致的。
物件和物件引用
class vehicle 有了這個模板,就可以用它來建立物件 vehicle veh1 new vehicle 通常把這條語句的動作稱之為建立乙個物件,其實,它包含了四個動作。1 右邊的 new vehicle 是以vehicle類為模板,在堆空間裡建立乙個vehicle類物件 也簡稱為vehic...
Java 物件和物件引用
為了接下來進行更好的分析,我先建立乙個demo類,用於後面的分析。public class demo 接下來,我們用demo類來建立乙個物件。demo demo newdemo 這一條語句,其實包括了四個動作 1 右邊的 new demo 是以demo類為模板,在堆空間裡建立乙個demo物件。2 末...
物件和物件的引用
stringbffer strb new stringbuffer abc new stringbuffer abc 是呼叫stringbuffer類的建構函式建立了乙個物件 strb是new stringbuffer abc 這個物件的引用 new方法建立的才是真正的物件 引用只是指向物件的乙個變...