Java 底层视角:对象引用、堆内存与方法调用的真实关系

发布于 2025-12-05 20:20:24

Java 底层视角:对象引用、堆内存与方法调用的真实关系

在 Java 中,经常有人问:“Java 是引用传递还是值传递?”从 JVM 底层视角看,Java 永远是值传递,只不过传递的是对象引用的值

先看一段代码:

public class Demo {
    public static void change(int[] arr) {
        arr[0] = 99;
    }

    public static void main(String[] args) {
        int[] data = {1, 2, 3};
        change(data);
        System.out.println(data[0]);
    }
}

运行结果是 99。原因并不是“按引用传递”,而是:data 中保存的是 堆内存中数组对象的地址值。调用 change 时,JVM 会把这个地址值复制一份传给参数 arr
此时 dataarr 指向同一块堆内存,所以修改数组内容会反映到原变量上。

但如果在方法中让 arr = new int[]{7,8,9},只会修改形参自己的引用指向,不会影响 data,因为引用值的拷贝本身已经完成。理解这一点,有助于我们在并发和性能场景中正确判断对象共享、逃逸分析以及 GC 压力来源。

0 条评论

发布
问题