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

Java方法传入数组后未修改原数组,为何输出为1而非3?

问题分析:Java数组参数重新赋值未修改原数组的原因

先看你给出的代码:

public class lalak
{
    public static void m1(int[] array)
    {
         array= new int[]{1,2,3,4,5};
        System.out.println(array[2]);
    }
    public static void main(String[] args)
    {
        int[] array = {1,1,1,1,1};
        m1(array);
        System.out.println(array[2]);
    }
}

你预期输出3但实际得到1,核心原因是Java的参数传递规则和你对引用类型的误解:

  • Java里所有参数传递都是按值传递,哪怕是数组这种引用类型,传递的也只是「原数组引用的副本」,而不是原引用本身。
  • 执行流程拆解:
    1. main方法中创建数组{1,1,1,1,1},变量array指向这个数组在堆内存的地址(比如假设是0x123)。
    2. 调用m1(array)时,把0x123这个地址值复制给m1方法的参数array,此时两个array变量(main里的和m1里的)都指向同一个数组。
    3. 但你在m1里执行了array = new int[]{1,2,3,4,5};——这一步是让m1方法里的array参数指向了一个全新的数组对象(比如地址0x456),和main里的原数组彻底断开了关联。
    4. 所以m1里打印的是新数组的第3个元素3,但main里的array仍然指向原数组0x123,自然输出1。

如果想真正修改原数组的内容,不要重新赋值参数,直接操作数组元素即可,比如把m1改成这样:

public static void m1(int[] array)
{
    // 直接修改原数组的元素,而不是重新赋值引用
    array[2] = 3;
    System.out.println(array[2]);
}

这时main里的数组第3个元素就会被改成3,输出结果就是3和3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:10:19