java数组按引用传递不起作用?

我认为几乎所有语言都包括java传递数组作为参考(可修改)

但不知何故,它在这里不起作用。 并且testArray仍然是1,2,3,大小为3

奇怪的是,如果我将结果[i] = 2更改为[1] = 2; 这行得通 。 它确实通过引用传递

这段代码有什么问题?

最后,我有一个=结果; (更新a)。 结果从堆栈中删除了。 这就是为什么一个仍然得到原来的?

我很困惑。

谢谢

class Test { public static void main(String[] args) { int[] testArray = {1,2,3}; equalize(testArray, 6); System.out.println("test Array size :" + testArray.length); for(int i = 0; i  biggerSize) throw new Error("Array size bigger than biggerSize"); int[] result = new int[biggerSize]; // System.arraycopy(a, 0, result, 0, a.length); // int array default value should be 0 for(int i = 0; i < biggerSize; i++) result[i] = 2; a = result; } } 

数组通过引用传递,但引用 按值传递。 也就是说,您可以更改引用的数组,但不能更改引用的数组

Java是按值传递的。 这就是您的代码不起作用的原因。 一个好的做法是将int[] a标记为final ,这样会导致编译错误(参见相应的Checkstyle规则 )。

从函数返回参数“a”并在main函数中赋值给testArray。 通过引用传递对象时,将复制引用并将其提供给函数。 因此,该对象现在由2个引用引用。 通过第二个引用对象的任何更改都将反映在第一个引用中,因为它们是两个引用的相同对象。 但是当你更改引用(而不是通过引用的对象)时,它是一个不同的情况。 您已将第二个引用更改为指向另一个对象(int []结果)。 因此,通过第二个引用的任何更改都只会更改“结果”对象。

 class Test { public static void main(String[] args) { int[] testArray = {1,2,3}; testArray = equalize(testArray, 6); System.out.println("test Array size :" + testArray.length); for(int i = 0; i < testArray.length; i++) System.out.println(testArray[i]); } public static int[] equalize(int[] a, int biggerSize) { if(a.length > biggerSize) throw new Error("Array size bigger than biggerSize"); int[] result = new int[biggerSize]; // System.arraycopy(a, 0, result, 0, a.length); // int array default value should be 0 for(int i = 0; i < biggerSize; i++) result[i] = 2; a = result; return a; } } 

当你做一个=结果; 对象一个 dosnt再指向testArray ,bc你正在改变它对结果地址的引用。 这就是为什么它会再次对testArray产生影响。 实际上你正在做的是你正在制作一个结果相同的地址,所以无论你改变什么,它都会改变结果

希望这有助于……

可以修改a引用的数组,但引用本身是按值传递的。 因此,如果您执行a[0] = 1 ,那么您将更改原始数组。 但是, a = result更改引用,因此原始引用不会更改。

Java始终是按值传递的 。

数组是java中的对象。 如果已使用大小(实际长度)初始化数组,则无法对其进行修改。 您可以创建一个具有不同大小的新数组(正如您当前在该函数中所做的那样)并将旧数组中的所有值复制到新数组。 在您的情况下,您有2个对象和3个引用。 如果要在调用函数中访问更大尺寸的数组,请使该函数返回更大尺寸的数组的引用。

 public class test { public static void main(String[] args){ int[] a = {15, 2, -3}; printArray(a); changeArray(a); printArray(a); } private static void changeArray(int[] a){ for(int i = 0; i < a.length; i++){ a[i]++; } } private static void printArray(int[] a){ for(int i = 0; i < a.length; i++){ System.out.print(a[i] + " "); } System.out.println(); } } 

----- -----输出

15 2 -3

16 3 -2