public class ArrayTest
{
public static void main(String[] args)
{
//ArrayTest test = new ArrayTest();
int[] arrayA = {1, 1, 1, 1, 1, 1};
ChangeArrayOne(arrayA);
for(int i = 0; i < arrayA.length; i++)
{
System.out.print(arrayA[i]);
}
System.out.println("");
ChangeArrayTwo(arrayA);
for(int i = 0; i < arrayA.length; i++)
{
System.out.print(arrayA[i]);
}
}
public static void ChangeArrayOne(int[] tarArr)
{
int[] arrayB = {0, 0, 0, 0, 0, 0};
tarArr = arrayB;
}
public static void ChangeArrayTwo(int[] tarArr)
{
int[] arrayC = {0, 0, 0, 0, 0, 0};
for(int i = 0; i < arrayC.length; i++)
{
tarArr[i] = arrayC[i];
}
}
}
运行结果为
ChangeArrayOne方法没有对arrayA造成影响,ChangeArrayTwo方法对arrayA造成影响。
引用对象的拷贝 !
没想通这句请看下面的代码:
public class ArrayTest
{
public static void main(String[] args)
{
//ArrayTest test = new ArrayTest();
int[] arrayA = {1, 1, 1, 1, 1, 1};
ChangeArrayOne(arrayA);
for(int i = 0; i < arrayA.length; i++)
{
System.out.print(arrayA[i]);
}
System.out.println("");
ChangeArrayTwo(arrayA);
for(int i = 0; i < arrayA.length; i++)
{
System.out.print(arrayA[i]);
}
}
public static void ChangeArrayOne(int[] tarArr)
{
int[] arrayB = {0, 0, 0, 0, 0, 0};
int[] arrayX = {3, 3, 3, 3, 3, 3};
arrayX = tarArr;
for(int i = 0; i < arrayX.length; i++)
{
System.out.print("arrayX[" + i + "]:" + arrayX[i] + " ");
}
System.out.println("");
tarArr = arrayB;
for(int i = 0; i < tarArr.length; i++)
{
System.out.print("tarArr[" + i + "]:" + tarArr[i] + " ");
}
System.out.println("");
for(int i = 0; i < arrayX.length; i++)
{
System.out.print("arrayX[" + i + "]:" + arrayX[i] + " ");
}
System.out.println("");
}
public static void ChangeArrayTwo(int[] tarArr)
{
int[] arrayC = {0, 0, 0, 0, 0, 0};
for(int i = 0; i < arrayC.length; i++)
{
tarArr[i] = arrayC[i];
}
}
}
运行结果是:
很明显,即使是在方法ChangeArrayOne改变tarArr的时候,arrayA仍然没变,这点由arrayX可知。
tarArr最开始得到指向和arrayA一样的首地址,但是之后由于tarArr = arrayB,tarArr指向了arrayB一样的首地址,而arrayA和得到tarArr未改变之前赋值的arrayX所指向的依然是最初那个首地址。