class ChangeIt
{
static void doIt( int[] z )
{
int[] A = z;
A[0] = 99;
}
}
class TestIt
{
public static void main( String[] args )
{
int[] myArray = {1, 2, 3, 4, 5};
ChangeIt.doIt(myArray);
for (int i = 0; i < myArray.length; i++)
{
System.out.print(myArray[i] + " ");
}
}
}
这里的题目,正确答案是输出99 2 3 4 5
为啥不是1 2 3 4 5,因为不是创建了一个新的数组A,可输出的是原来的数组myArray,我没弄的很懂,求解。
这里在main方法里创建的数组,可以通过数组的引用传递给其他方法进行访问和修改,且在其他方法里的修改可以在main方法里看到修改的变化,因为是通过引用而直接操作了内存的相应数据。
具体是在main方法创建数组,然后调用了ChangeIt.doIt()这个方法通过传入数组的引用访问修改了数组myArray第一个元素的值(方法通过引用改变值,一般是可以在调用这个方法的方法里看到变化),然后在main方法里打印数组的值,所以就是输出:99 2 3 4 5.
参考资料:
Java语言程序设计基础篇(原书第8版)-Y. Daniel Liang著- 第167页。
int[] A = z;
实际A数组是指向传入的z数组的,因此修改A[0]就是修改传入的myArray[0]的值为99