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

作者: Chikei ( )   2014-12-18 16:54:34
一起回一回
1. String是final class代表的含意是這個class不能被繼承,跟能不能被修改沒關係
也就是說final修飾的是class的類型,不是class的內容。
2. 原po你少了一個認知,java內所有非基本型別的變數代表的都是參照(指標)。
所以
String var = "str1";
var = "str2";
第一行code的含意是定義一個參照var並指向一個String object內含"str1"
第二行code的含意是把參照var指向"另外一個"String object內含"str2"
3. 原文ex2 "看起來"可以修改String是因為你的e1從頭到尾指到同一個Ex2 object,
而tell()只是修改那一個Ex2 object裡面的temp參照。
兩次println(e1.temp)得到的String object "不是同一個" String object
4. 所謂String不能被修改是體現在String的object method,請參閱JDK,你會發現
所有"修改"的method都是回傳一個String,而這個回傳值會指向跟原本被呼叫
method的String不同一個object,也就是說
String foo = "str";
String bar = foo.substring(1);
foo/bar會指向不同的String object

Links booklink

Contact Us: admin [ a t ] ucptt.com