對象與引用變量

轉自:http://www.cnblogs.com/huangyu/archive/2004/08/02/29622.html
從宏觀的角度來看,對象是類的實例。比如:

Paste_Image.png

這時,我們會象通常所說的那樣講到:我們創建了一個名為nemo的Someone類的對象(是的,這沒有錯,但它會和下文所講的一些內容產生些許理 解上的困惑)。因為每當創建類的一個實例(昵稱為nemo的某人),就創建該類的一個對象(名為nemo的Someone類的對象),而每個對象自身包含 類中定義的所有實例變量(age,sex,name等)的一個拷貝,所以說對象nemo是Someone類的實例。順便,我們再創建一個名為andy的 Someone類的對象:

Paste_Image.png

對象nemo和對象andy是相同的嗎?他們僅僅是名字不同而已嗎?不——因為每個對象的變量的值不同!比如:

Paste_Image.png

所以nemo和andy是兩個不同的對象,唯一相同的是它們都屬于同一種類型——Someone類!而從微觀的角度來看,我們前面所說的“對象nemo”真的是對象嗎?你可能會奇怪我怎么會這么問...實際上,Someone nemo = new Someone();這一創建一個Someone類的對象的過程分為兩步:

Paste_Image.png

nemo = new Someone();

此時,對于nemo的理解應該是:nemo是一個引用新創建的Someone類對象的變量(如同c語言的指針變量),它本身并不是一個對象!

Paste_Image.png

現 在你理解了為什么說類是引用類型了吧?——類對象通過引用來訪問呀!同時,也說明了為什么上文說“nemo和andy是兩個不同的對象”——運行時為對象 動態分配內存,所以兩個對象所在的內存地址不同,當然兩個對象是不同的咯!——等等,你剛剛不是說nemo是引用變量嗎?怎么又說“nemo... 是...對象”了呢?筆者在初學時在理解上存在這樣的困惑!但是,你可能注意到了,Someone是一個類,而nemo自然就是聲明為這個類的一個變量;而類作為一種類型,它是屬于引用類型,所以nemo自然就是一個引用類型的變量即引用變量了啊。關鍵的一點是,我們可以從不同的角度來看這一問題:宏觀上,nemo是對象;而微觀上,深層的理解,nemo是引用變量。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容