每天都在變化,每天都在進步
本篇博客從例子出發講解對象和對象引用的關係
基礎情況
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){ test=new A(); } A a=new A();//(01) test(a); //(02)
結論: (01)步驟的a引用仍是原來的,並沒因爲(02 )發生變化,因爲方法傳參的時候也發生了引用的複製,所以此時(02),對第二個test引用進行了修改並不影響(01)的內容
情景3
public void test(A test){ test.setB("dd"); } A a=new A();//(01) test(a); //(02)
結論:此時a的引用對象內容改變,因爲引用和複製後的引用都指向相同的對象,此時會發生變化
情景4
對於List、Map 是等同的
A a=new A(); List<A> test=new ArrayList<>(); test.add(a); a=null;
結論:這個情況和情景2類似,發生了方法傳參
總結:對於對象引用來說 “=” 和傳參會導致引用複製,此時就相當於多個引用對應於一個對象,此時其中的一個引用更換引用或者設置爲null並不會影響其他的引用,如果修改了對象,則對於所有引用,其內容都是一致的。