package Feb2017;
public class Ques0210 {
public static void main(String[] args) {
String str = new String("World");
char ch[] = {'H', 'e', 'l', 'l', 'o'};
change(str, ch);
System.out.println(str + " and " + new String(ch));
}
public static void change(String str, char ch[]) {
str = "Change";
ch[0] = 'C';
}
}
主程序輸出結果是什麼?
World and Cello
str = "Change" 只是將方法參數 str(引用副本)指向新字符串對象main 中的 str 仍指向 "World",完全不受影響ch 參數獲得的是數組對象引用的副本ch[0] = 'C' 通過引用修改了同一個數組對象的內容ch 看到修改後的內容:{'C','e','l','l','o'}
main 調用前:
str ──────► "World" (堆/常量池)
ch ──────► char[] {'H','e','l','l','o'} (堆)
change 方法執行:
參數 str ──────► "World" (同一對象)
參數 ch ──────► char[] {'H','e','l','l','o'} (同一數組)
str = "Change":
參數 str ──────► "Change" (新對象,main 中 str 不變)
ch[0] = 'C':
參數 ch ──────► char[] {'C','e','l','l','o'} (同一數組被修改,main 可見)
change 中改為 ch = new char[]{'X'},main 中 ch 會變嗎?不會,同理引用副本重新指向StringBuilder 可變,若傳入 StringBuilder sb 並 sb.append("X"),main 可見修改