class TestIt
{
public static void main ( String[] args )
{
int[] myArray = {1, 2, 3, 4, 5};
ChangeIt.doIt( myArray );
for(int j=0; j<myArray.length; j++)
System.out.print( myArray[j] + " " );
}
}
class ChangeIt
{
static void doIt( int[] z )
{
z = null ;
}
}
输出的值是 1 2 3 4 5
为什么不报空指针错误?我的理解是地址指向null以后myArray就是null了,难道是z和myArray其实是【值传递?】,z和myArray指向同一个地址,然后只是z的地址值被赋值为null了,通过相同的地址改变地址中存放的内容才能真正改变myArray的值?不知道是否是这样理解的,请各位大神指点迷津。
以下代码为对比:
class Test
{
static void doIt( int[] z )
{
for(int i=0;i<z.length;i++)
z[i]=i+2;//单个赋值
}
public static void main ( String[] args )
{
int[] myArray = {1, 2, 3, 4, 5};
Test.doIt( myArray );
for(int j=0; j<myArray.length; j++)
System.out.print( myArray[j] + " " );
}
}
输出的值是2 3 4 5 6
class Test
{
static void doIt( int[] z )
{
for(int num:z)
System.out.print(num+" ");
int[] temp={2,3,4,5};
z=temp;//整体赋值
System.out.println();
for(int num:z)
System.out.print(num+" ");
}
public static void main ( String[] args )
{
int[] myArray = {1, 2, 3, 4, 5};
Test.doIt( myArray );
System.out.println();
for(int j=0; j<myArray.length; j++)
System.out.print( myArray[j] + " " );
}
}
输出的值:
1 2 3 4 5
2 3 4 5
1 2 3 4 5