一、前言
在java學習中,理解對象以及對象的引用是萬里長征的第一步。但是,現在大量的java學習書籍都將對象以及對象的引用混為一談,然而實際上它們有着本質的區別。為了幫助更多的java學者更好的理解,我將自己的學習理解記錄下來。如有理解不全或者錯誤的地方,歡迎大家批評指正。
二、分析對象引用與對象的區別
為了接下來進行更好的分析,我先建立一個Demo類,用於后面的分析。
public class Demo{
//默認構造方法
public Demo{
}}
接下來,我們用Demo類來創建一個對象。
Demo demo=new Demo();
這一條語句,其實包括了四個動作:
1)右邊的“new Demo”,是以Demo類為模板,在堆空間里創建一個Demo對象。
2)末尾的()意味着,在對象創建后,立即調用Demo類的構造函數,對剛生成的對象進行初始化。
3)左邊的“Demo demo”創建了一個Demo類引用變量,它存放在棧空間中。也就是用來指向Demo對象的對象引用。
4)“=”操作符使對象引用指向剛創建的那個Demo對象。
2)末尾的()意味着,在對象創建后,立即調用Demo類的構造函數,對剛生成的對象進行初始化。
3)左邊的“Demo demo”創建了一個Demo類引用變量,它存放在棧空間中。也就是用來指向Demo對象的對象引用。
4)“=”操作符使對象引用指向剛創建的那個Demo對象。
當然這條語句我們也可以寫成:
Demo demo;//創建對象引用
demo=/*將對象引用指向對象*/new Demo();//創建對象

三、對象引用與對象之間的關系
1)從對象引用出發:
一個對象引用可以指向一個對象
Demo demo;//一個對象引用
demo=new Demo();//一個對象引用指向一個對象
也可以不指向對象。
Demo demo;//創建對象引用,但是沒有指向對象
2)從對象出發:一個對象可以被一個對象引用引用
Demo demo;//創建對象引用
demo=new Demo();//創建對象,並被一個對象引用指向
也可以被多個對象引用同時引用
Demo demo1,demo2,demo3;//創建多個對象引用
demo1=new Demo();
demo2=demo1;
demo3=demo2;//創建對象,並被多個對象引用指向