Re: [問題] primitive與refernce的問題
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《crazykai (Gooday)》之銘言:
: : 最近在看Head First Java,想不到才看到第三章就卡住了
: : 我的疑問是這樣的
: : primitive因為是以位元組表達實際變數值,因此不用另外宣告實體
: : 而物件的參考變數只是類似指標作用,因此還需宣告實體
: : 但String是個物件呀,為什麼我們不會寫
: : String name = new String();
: : name = "crazykai"
: : 請大大們有空指導一下吧 <(_ _)>
: 對於 reference 來說, 你可以想成 = 是指把該 reference
: 指向某 obj instance.
: 第二句是 name 這 reference 指向 "crazykai" 這
: 個 string literal 而已. string literal 本身也是一個
: object.
: 你上面兩句實際是發生這樣的事
: (String name= new String())
: 1) 生成 String()
: +--- String -----+
: +----------------+
: | |
: [name] +----------------+
: 2) name = 該新 String obj
: +--- String -----+
: +----------------+
: --->| |
: [name] --/ +----------------+
: (name = "crazykai")
: 3) name 指外另一 string object
: +--- String -----+
: +----------------+
: | |
: [name] -- +----------------+
: \
: \ +--- String -----+
: \-------> +----------------+
: | "crazykai" |
: +----------------+
: 和你認知的沒有分別. 只是 String object 生成的方法
: 不必一定要乖乖寫 new String(), 而是單純寫 "balblabal"
: 就等如是 new 了一個 String instance.
: (其實這樣說不太正確, 因為 string literal 的情況, 是在
: 程式一開始就已經存在那些 string literal 的 String obj
: instance, 而不是用的那刻才 new. 不過簡化一點來說你應
: 該會比較容易理解)
大大畫得超好
我的想法只有第三個有點不同
3) name 指外另一 string object
+--- String -----+
+----------------+
| |
[name] -- +----------------+
\
\ +--- String -----+
\-------> +----------------+
| "crazykai" |
+----------------+
^^^^^^^^^^^^^^^^^^此區塊為String pool
String object好像是用成一個pool
所有的String object建立起來就丟在裡面
這個狀況下沒有什麼差別
可是如果後來又要呼叫到"crazykai"
其實是指到String pool裡面已經創造好的這個物件
並不會再重新new一個記憶體空間
希望有幫到忙^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.17.93
→
07/02 14:30, , 1F
07/02 14:30, 1F
→
07/02 16:22, , 2F
07/02 16:22, 2F
→
07/03 10:46, , 3F
07/03 10:46, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):