在我的 Java 测试中是下一个问题:
there is the next method:
public void changer(int[] x, int y) { x[y] = x[y] +3; y = y * 2; }
我们有一个名为 a
的数组,其值为:
2,4,0,1,-6,3,8,7,5
如果 b = 3
下一次调用后 a 和 b 的值是多少:
changer(a,b);
我的回答是: b = 6
a = 2,4,0,4,-6,3,8,7,5
我在 BlueJ 上测试过,得到了相同的答案,但测试人员写道:错了!
你说呢?
最佳答案
你对数组值的看法是对的,但对 b 值的看法是错误的。
当你调用一个方法时,java 按值传递所有东西,这意味着改变 y 只会改变局部的值,而改变不会反射(reflect)在 b 上。
但是,当传递数组和对象时,传递的是一个表示数组指针的值。这意味着 x = new int[8]
根本不会改变 a,因为当它发生在 y 时,变化不会反射(reflect)到 a。但是,更改数组成员或对象属性会如您预期的那样工作,导致 a 和 x 都指向内存中的同一个数组。
关于Java 数组 - 来自测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351084/