又见Clone
本来以为已经弄清楚Clone了,没想到在使用的时候又遇到问题!总归是纸上得来终觉浅啊!
说来也怪一些基础的东西没搞清。
public static void testArrayClone(int[] array) {temp = array.clone();for (int i = 0; i < temp.length; i++) {temp[i] = (int) Math.random();
}System.out.println("函数体以内--克隆之前:"+array);
array = temp.clone();System.out.println("函数体以内:"+array);
// for (int i = 0; i < temp.length; i++) {
// array[i] = temp[i];
// }
}
在函数体外调用array,array便没有变啊!
因为这里和C类似,在函数中,通过参数对对象的操作不会丢失,但是对这个引用的重新赋值会丢失。其实应该说是对引用重新赋值了啊!额~以为Clone(深克隆)是一个对一个进行赋值的!!于是大错特错啊,Clone是复制了一个新的引用地址给对象!
public static void testClone(){int[] a = {1,2,4,2};
int[] b = {2,3,5,56};
System.out.println(a);System.out.println(b);a = b.clone();System.out.println(a);System.out.println(b);}
输出:
[I@1888759[I@6e1408[I@e53108[I@6e1408
是啊,是赋了一个新的引用给他啊!曾经的a再也找不到了。