首页 > 解决方案 > 给定的 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个场景有什么区别?

标签: javaarraysfunctionmethods

解决方案


推荐阅读