Re: [問題] JAVA String

看板java作者 (nobody)時間17年前 (2009/01/27 10:23), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串8/9 (看更多)
我還是初學者 (暫時看不懂各位先進關於記憶體指令的討論) 不過我記得之前問老師問題 他有提到 string literal 不會被 garbage collected 要用 new String ("type something here ") 產生的物件才會被GCed ? 原PO指令所顯示的是 literal 呼叫GC會被回收嗎 ?? 還是我們老師只講了一半 沒講完全部? ※ 引述《mgdesigner (魔法設計師)》之銘言: : ※ 引述《sysc (和平時多準備)》之銘言: : : 如果說我有一個String : : String a = "xxx"; : ~~~~~~~~~~~~~~~~~ : 上面拆開來等於說: : 1.產生一個新物件"xxx" : 2.產生一參考 a,讓a指向"xxx" : : 現在當我這個a 想要改變值的時候 : : 現在我是這樣寫 : : a = "bbb"; : ~~~~~~~~~~~ : 這等於說: : 1.產生一個新物件"bbb" : 2.把a改指到"bbb" : 但是"xxx"仍然存在喔,只是"xxx"目前沒有被一個參考指到。 : : 但是 如果要對記憶體比較好一點的話 是否需要先用個方法把a 給clear 掉? : 你應該是說把"xxx"給清掉吧? : a=null;a= "bbb";這樣?記得gc()一下,不過應該是沒差很多。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 206.116.15.204

01/27 20:18, , 1F
你們老師講的是對的,因為就算 a 不再指到 "bbb", string
01/27 20:18, 1F

01/27 20:20, , 2F
pool 裡也還會有變數指向 "bbb", 所以 "bbb" 無法被 GCed.
01/27 20:20, 2F

01/27 20:22, , 3F
不過我印象中好像有某種特殊情形下,"bbb" 還是會被 GCed, 但
01/27 20:22, 3F

01/27 20:24, , 4F
細節我忘了 XDD
01/27 20:24, 4F
文章代碼(AID): #19Vd0Okj (java)
討論串 (同標題文章)
文章代碼(AID): #19Vd0Okj (java)