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

