Java 參考類型變量在棧中存儲什麼?是直接指向堆中對象的地址,還是對象本身?當值為 `null` 時又代表什麼含義?這是很多初學者困惑的核心概念。
參考類型變量的值,是指向堆內存中對象的引用(引用值/句柄),而非對象本身,也非裸指針地址。
棧內存 (Stack) 堆內存 (Heap) +----------------+ +------------------+ | 變量 str | ───→ | String 對象 | | 值: 引用值 | | "Hello" | +----------------+ +------------------+
基本類型通過裝箱轉為對應包裝類對象(如 `Integer`),此時會在堆上創建對象,變量持有其引用。拆箱則逆向提取值。這過程涉及對象創建與引用賦值,非簡單值拷貝。
public class RefDemo {
public static void main(String[] args) {
String a = "Hello"; // 引用指向字符串常量池對象
String b = a; // 複製引用值,a、b 指向同一對象
b = "World"; // b 指向新對象,a 不受影響
String c = null; // c 不指向任何對象
// c.length(); // 拋出 NPE
}
}
理解「引用即句柄」而非「地址」,是掌握 Java 內存模型、避免空指針異常、正確進行參數傳遞分析的基石。參考類型變量的值 = 對象在堆中的定位器,`null` = 無效定位器。