我认为几乎所有语言(包括Java)都将数组传递给函数作为引用(可修改)。
但由于某种原因,它在这里不起作用,并且大小testArray仍为1,2,33。
testArray
1,2,33
奇怪的是,如果我更改result[i] = 2为a[1] =2它的话。它确实通过了引用。
result[i] = 2
a[1] =2
此代码有什么问题?
最后,我有了a = result;(更新a)。结果是否从堆栈中删除。这就是为什么我仍然要恢复原著a吗?
a = result
我很迷惑。
谢谢!
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 < testArray.length; i++) System.out.println(testArray[i]); } public static void 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; } }
数组通过引用传递,但引用通过value传递。也就是说,您可以更改所a引用的数组,但是不能更改所a引用的数组。
value
a