You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何如下Java代码输出为[15,2,3,4]?未修改arr却改变结果

为什么修改数组y会影响原数组arr?

示例代码

public class Alle {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        int [] y = arr;
        y[0] = 15;
        System.out.println(Arrays.toString(arr));
    }
}

原因解析

核心在于Java中的数组属于引用类型,和基本数据类型的赋值逻辑完全不同:

  • 执行int[] arr = {1,2,3,4};时,JVM会在堆内存中创建一个实际存储元素的数组对象,变量arr只是在栈内存中保存了这个堆数组的内存地址(也就是引用)。
  • 当执行int [] y = arr;时,并没有复制堆里的数组本身,只是把arr持有的内存地址拷贝给了y。此时arr和y是两个指向同一个堆数组对象的引用变量。
  • 所以通过y[0] = 15;修改元素时,本质是修改了堆中那个唯一的数组对象,arr作为指向同一对象的引用,输出自然会显示修改后的结果。

解决方法

如果想让修改y不影响arr,需要创建原数组的拷贝,比如使用Arrays.copyOf方法:

int[] y = Arrays.copyOf(arr, arr.length);

这样y会指向一个新的堆数组对象,两者修改互不影响。

内容的提问来源于stack exchange,提问作者Vithushan Thiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:20:27