String str = "good";
char[] ch = {'a','b','c'};
change(str, ch);
// 輸出:str="good" 不變,ch 內容變為 "gbc"
String、Integer 等**不可變對象**:方法內重新賦值(str = "new")只改變局部引用指向,原對象不變,外部引用仍指向舊對象。char[]、List、自定義對象等**可變對象**:方法內通過引用修改**對象內部狀態**(ch[0]='g'),外部可見變化,因為雙方指向同一堆對象。
外部:str ──────► "good" (不可變)
ch ──────► [a,b,c] (可變堆對象)
方法內:
參數 s 指向 "good",賦值 s="new" 只斷開 s 與 "good" 連接,外部 str 不受影響。
參數 c 指向 [a,b,c],c[0]='g' 直接修改堆內存,外部 ch 同步看到變化。
Java 只有**值傳遞**。引用傳遞的是「引用的值」(地址)。不可變對象無法通過引用修改內容,可變對象可以。