標籤:
(1)指標是對象在記憶體中的地址;(2)引用是對象的別名,其實質就是功能受限但是安全性更高的指標;(3)控制代碼是指標的指標,控制代碼實際上是一個資料,是一個Long (整長型)的資料。控制代碼是一個標識符,是拿來標識對象或者項目的,它就象我們的姓名一樣。Windows是一個以虛擬記憶體為基礎的作業系統。在這種系統內容下,Windows記憶體管理器經常在記憶體中來回移動對象,依此來滿足各種應用程式的記憶體需要。對象被移動意味著它的地址變化了。如果地址總是如此變化,我們該到哪裡去找該對象呢?為瞭解決這個問題,Windows作業系統為各應用程式騰出一些記憶體儲地址,用來專門登記各應用對象在記憶體中的地址變化,而這個地址(儲存單元的位置)本身是不變的。Windows記憶體管理器在移動對象在記憶體中的位置後,把對象新的地址告知這個控制代碼地址來儲存。
然後我們回到JAVA來解釋這個問題:
Java中有3個資料類型:基礎資料型別 (Elementary Data Type)、參考型別和null類型。其中,參考型別包括類類型(含數組)、介面類型。為了區別參考型別的變數標識符和基礎資料型別 (Elementary Data Type)變數標識符,我們特別的(特意的)使用Handle來稱呼參考型別的變數標識符。對象的引用是建立對象時的傳回值!引用是new運算式的傳回值。new A(); 這裡真正建立了一個對象,但我們沒有用控制代碼去持有(hold、拿著、儲存)該引用。handle是變數,reference是一種變數值。
A a = new A() ;
(1)控制代碼a——常見為A a;或A a=new A();前者沒有被初始化,後者被手工初始化。(如果a是一個類的成員變數,會被預設初始化。)控制代碼不同於基本變數的關鍵,它是一種間接定址方式。控制代碼聲明常常稱為對象聲明(如果你感到可能引起混淆,不理睬對象聲明的說法好啦)。
(2)建立對象——new A();這才是真正的建立對象。對象一般通過new運算式來建立。
(3)計算new運算式的值:計算new運算式的值的整個過程,在微觀上完成了對象的建立和這個對象自己的成員變數的初始化,在宏觀上得到new運算式的值,這個值稱為新對象的引用;
(4)引用:new A()的值。引用可以簡單的看作對象佔據記憶體空間的地址;通過對象的引用,就可以方便的與其他對象區別開來,引用就是對象獨特的身份標識。
(5)控制代碼的初始化:控制代碼 = 引用;即把引用賦值給控制代碼,如語句a=new A();完成控制代碼的初始化後,就可以用控制代碼遙控對象了。
(6)對於語句A a=new A();是對象建立及對象初始化與控制代碼的初始化的合并。
轉自:http://www.cnblogs.com/lsjwzh/archive/2010/05/08/1730480.html
【轉】控制代碼、引用、指標與對象