Re: [問題] primitive與refernce的問題

看板java作者 (FET)時間16年前 (2009/07/02 14:08), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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
在memory model裡,只有stack跟heap兩塊,物件在heap
07/02 16:22, 2F

07/03 10:46, , 3F
對一個初學者說 stack/heap, 一點幫助也沒有耶...
07/03 10:46, 3F
文章代碼(AID): #1AJ4xGns (java)
文章代碼(AID): #1AJ4xGns (java)