Re: [問題] 請教String的問題
※ 引述《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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章