java - 给定的 2 个 Java 代码有什么区别?
问题描述
在调试我的 Java 代码时,我观察到一些不寻常的事情。考虑以下示例:
public static int[] func(int[] arr) {
int[] res=new int[]{1,2,3,4};
return res;
}
在主要功能中:
vals=new int[]{0,0,0,0};
vals=func(vals);
for (int i=0;i<4;i++) System.out.println(vals[i]);
当我用 'vals' 作为参数调用 'func' 并将 vals 设置为返回的数组时,它工作正常,并且里面的值是返回数组的值。我得到输出:
1
2
3
4
现在考虑一下:
public static void func2(int[] arr) {
arr=func(vals);
}
在主要功能中:
vals=new int[]{0,0,0,0};
func2(vals);
for (int i=0;i<4;i++) System.out.println(vals[i]);
当我使用 'vals' 作为参数调用 func2 时,输出不同,并且 'vals' 保留其原始值,即输出为:
0
0
0
0
根据我的说法,这不应该发生,因为我将“vals”分配给从“func2”中调用的“func”返回的新数组,而不是直接在主函数中调用。我想知道为什么会这样。2个场景有什么区别?