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

看板java作者 (小天)時間10年前 (2014/12/18 15:32), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/6 (看更多)
※ 引述《kdok123 (小天)》之銘言: : ex1: : public static void main(String[] args){ : String str1 = "Hello"; : System.out.println(str1); : tell(str1); : System.out.println(str1); : } : public static void tell(String str2){ : str2 = "kdok123"; : } : 輸出: Hello : Hello : 結論: 因為String的值不能被修改 : ex2: : class Ex2{ : String temp = "Hello"; : } : public class Ex2Demo{ : public static void main(String[] args){ : Ex2 e1 = new Ex2(); : e1.temp = "kdok"; : System.out.println(e1.temp); : tell(e1); : System.out.println(e1.temp); : } : public static void tell(Ex2 str2){ : str2.temp = "kdok123"; : } : } : 輸出:kdok : kdok123 : 問題:為什麼這邊的String就可以被修改呢? : java新手,問題有點淺,我覺得印出來的應該是新new出來的String,並不是原本那一個 : 但還是不太確定,希望有人可以幫我解釋一下 我這邊的問題很簡單,因為有觀念是"string 是 final類不能修改" 但我自己簡單測試了一下卻測試不出來? 測試1: String a = "hello"; a = "haha" sout(a); 輸出: haha 問題1: 不是說不能修改嗎? 到底是什麼時候不能修改呢? 問題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到底什麼時候不能被修改? 2:String如果是一個class,value應該跟著跑的不是嗎? 打得有點亂,感謝大家的回應 補充一下: 我的ex1把String改成Integer還是不能修改的,所以我才沒找到 "String不能修改的特性" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.50.98 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1418887920.A.6B0.html ※ 編輯: kdok123 (175.98.146.2), 12/18/2014 15:36:05
文章代碼(AID): #1KaeBmQm (java)
討論串 (同標題文章)
文章代碼(AID): #1KaeBmQm (java)