首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 參數傳遞機制:為什麼 String 不變而 char 數組變了

     編輯:程式設計綜合問答

代碼場景


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 只有**值傳遞**。引用傳遞的是「引用的值」(地址)。不可變對象無法通過引用修改內容,可變對象可以。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved