以上圖為例
House blueHouse = new House("blue")是創建 House 類別的新實例。記住 House 是一個藍圖,我們將它分配給 blueHouse 變數。 換句話說,它是對記憶體中物件的引用。
下一行 House anotherHouse = blueHouse; 在記憶體中創建對同一物件的另一個引用。 這裡我們有兩個引用指向記憶體中的同一個物件。 仍然是一所房子,但對那個物件有兩個引用。舉例來說,我們有兩張紙,上面寫著房子建造地點的實際地址。
接下來我們有兩個打印 blueHouse 顏色和 anotherHouse 顏色的 println 語句。 兩者都將打印“blue”,因為我們有兩個對同一物件的引用。
下一行調用方法 setColor 並將顏色設置為黃色。 在左側,您可以看到 blueHouse 和 anotherHouse 現在都具有相同的顏色。 為什麼? 請記住,我們有兩個引用指向記憶體中的同一個物件。 一旦我們改變其中一個的顏色,兩個引用仍然指向同一個物件。 在我們的真實世界示例中,即使我們在兩張紙上寫了相同的地址,該地址仍然只有一所房屋。
從House greenHouse = new House("green"),我們正在創建另一個顏色設置為“綠色”的 House 類別的新實例。 現在我們在記憶體中有兩個物件,但我們有三個引用,分別是 blueHouse、anotherHouse 和 greenHouse。 變數(引用)greenHouse指向記憶體中的一個物件,而blueHouse和anotherHouse指向記憶體中的另一個物件。
這裡我們將anotherHouse指向greenHouse參考的物件。 換句話說,我們正在取消對另一個房子的引用。 它現在將指向記憶體中的另一個物件。 在它指向具有“黃色”顏色的房子之前,現在它指向具有“綠色”顏色的房子。 在這種情況下,我們在記憶體中仍然有三個引用和兩個對象,但是 blueHouse 指向一個物件,而 anotherHouse 和 greenHouse 指向記憶體中的同一個物件。