Java 中方法返回對象時,實際返回的是對象引用的副本(即指向堆內存對象的地址值),屬於引用傳遞(按值傳遞引用)。
棧內存(方法幀) 堆內存
┌─────────────────┐ ┌──────────────┐
│ 方法參數/局部變量 │ │ 對象實例 │
│ ref ──────────────────▶│ new Object() │
└─────────────────┘ └──────────────┘
▲
│ 返回時:將 ref 的值(地址)複製給調用者的變量
│
調用者棧幀
┌─────────────────┐
│ 返回值變量 │
│ ref_copy ──────────────▶ 同一個堆對象
└─────────────────┘
public class Test {
static class Node { int val; }
static Node create() {
Node n = new Node(); // 堆上創建對象
n.val = 10;
return n; // 返回引用(地址值)
}
public static void main(String[] args) {
Node a = create(); // a 接收返回的引用
Node b = a; // b 複製引用,指向同一對象
b.val = 20;
System.out.println(a.val); // 輸出 20,說明 a、b 指向同一對象
}
}