Re: [問題] 請教String的問題

看板java作者 (Mr. Pan)時間10年前 (2014/12/18 15:54), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/6 (看更多)
※ 引述《kdok123 (小天)》之銘言: : 我這邊的問題很簡單,因為有觀念是"string 是 final類不能修改" 不太對, String 被定義成 final 類別是指不能被繼承 public final class String { .... } 自己測試看看: http://ideone.com/VbYiMc : 但我自己簡單測試了一下卻測試不出來? : 測試1: : String a = "hello"; : a = "haha" : sout(a); : 輸出: haha : 問題1: 不是說不能修改嗎? 到底是什麼時候不能修改呢? 從 ┌───┐ a ───→│hello │ └───┘ =========================== 變成 ┌───┐ a ─┐ │hello │ 不能變動的,是方塊中的這個文字 │ └───┘ │ ┌──┐ └─→│haha│ └──┘ 所以輸出的是 haha , 不是 hello : 問題2: : 誠如上面的ex1,我認為String是一個class,所以若是執行 : str2 = "kdok123"; : 應該要可以被更改(因為value是跟著object走的) : 所以我才認為這邊不是call by value的觀念(因為不管call by 什麼object的value都是 : 跟著object走的,看object傳到哪就改到哪) 看完上面和我剛剛回的文你再來重新想看看這個問題 應該會有另一層理解 : 舉例來說 : 我宣告一個calss test{ : int a; : } : 並實例化 test ob = new test(); : 我不管在哪裡執行 ob.a = whatever int; : 都是可以修改的 : 不知道大家有看出我的困惑點在哪嗎? : 重複一次 : 1:String到底什麼時候不能被修改? String 物件的值(文字)不能被修改 String str1 = "XDD" str1 是變數 "XDD" 是 String 物件實體 (instance) out.println(str1); 會輸出 "XDD" 是因為 str1 指向 "XDD" 這個實體 你可以改 str1 指向的東西,但不能改 "XDD" 的內容 ======================== String str = "XDD" str = "ABC" --------------- 錯誤: ┌──┐ str ──→│XDD │ └──┘ ----- 變成 ----- ┌──┐ str ──→│ABC // 字串是 immutable └──┘ --------------- 正確: ┌──┐ str ──→│XDD │ └──┘ ----- 變成 ----- ┌──┐ str ─│XDD │ └──┘ │ ┌──┐ └→│ABC │ └──┘ : 2:String如果是一個class,value應該跟著跑的不是嗎? : 打得有點亂,感謝大家的回應 : 補充一下: 我的ex1把String改成Integer還是不能修改的,所以我才沒找到 : "String不能修改的特性" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.118.189 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1418889276.A.62D.html ※ 編輯: darkk6 (218.164.118.189), 12/18/2014 16:02:50
文章代碼(AID): #1KaeWyOj (java)
文章代碼(AID): #1KaeWyOj (java)