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

Java 對象與引用:無指針概念下的地址傳遞本質

     編輯:程式設計疑難解答

核心結論

Java沒有指針(Pointer),只有引用。對象變量存儲的是對象在堆內存中的地址引用,可理解為「受限指針」:

  • 不可算術運算(+, -, ++ 等)。
  • 不可強制轉換任意地址。
  • 自動垃圾回收管理生命週期。

對比 C/C++ 指針

特性C/C++ 指針Java 引用
存儲內容內存地址數值對象引用(JVM 內部地址/句柄)
算術運算支持不支持
釋放內存手動 free/delete自動 GC
空值NULL/nullptrnull
傳參方式值傳遞(地址)值傳遞(引用副本)

Java 值傳遞本質


void modify(Person p) {
    p.setName("李四"); // 修改對象內容,外部可見
    p = new Person("王五"); // 修改局部引用指向,外部不可見
}
Person p = new Person("張三");
modify(p);
System.out.println(p.getName()); // "李四"
  • 實參 p 的引用副本傳給形參。
  • 通過副本訪問同一對象 → 可修改對象狀態。
  • 形參重新賦值 → 僅改變局部副本指向,不影響實參。

實際開發建議

  1. 理解「引用傳值」機制,避免誤以為是引用傳遞。
  2. 不可變對象(String, 包裝類, 自定義 final 類)天然線程安全,無副作用風險。
  3. 需要修改引用指向時,返回新對象或使用包裝類(AtomicReference, Holder)。

總結:Java 對象變量本質是引用,可類比 C 指針但去除了危險操作,配合 GC 實現內存安全。

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