物件和物件引用

2021-07-30 22:08:47 字數 1054 閱讀 3964

每天都在變化,每天都在進步

基礎情況

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方法建立的才是真正的物件 引用只是指向物件的乙個變...