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

作者: kdok123 (小天)   2014-12-18 15:31:57
※ 引述《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不能修改的特性"

Links booklink

Contact Us: admin [ a t ] ucptt.com