一、一维数组的clone()方法
public class PrimerArrClone {
public static void main(String[] args){
int [] arr = {7, 8, 9};
int [] cloneArr = arr.clone();//调用数组的clone()方法,将数组复制一份,并让cloneArr指向复制出来的数组
arr[2] = 777;
cloneArr[2] = 888;
System.out.println("The third number of arr is: " + arr[2]);
System.out.println("The third number of cloneArr is: " + cloneArr[2]);
}
}
运行后输出结果如下:
The third number of arr is: 777The third number of cloneArr is: 888
二、当数组类型不再是基本数据类型
创建一个TestClone类
public class TestClone {
int value = 9;
}
再创建一个ObjArrClone类
public class ObjArrClone {
public static void main(String[] args){
TestClone [] arr = new TestClone[2];
arr[1] = new TestClone();
TestClone [] cloneArr = arr.clone();//对数组arr调用clone()方法,并让cloneArr指向这个复制出来的数组。因为数组中的内容是指向对象的引用,所以复制的过程中并没有产生新的TestClone对象。亦即,复制了数组,但是并没有复制数组指向的对象。
arr[1].value = 777;
cloneArr[1].value = 999;
System.out.println("The value of second element of arr is: " + arr[1].value);
System.out.println("The value of second element of cloneArr is: " + cloneArr[1].value);
cloneArr[1] = new TestClone();//这是新创建的对象,因此不再指向原来的对象。
arr[1].value = 777;
cloneArr[1].value = 999;
System.out.println("The value of second element of arr is: " + arr[1].value);
System.out.println("The value of second element of cloneArr is: " + cloneArr[1].value);
}
}
运行输出结果如下:
The value of second element of arr is: 999
The value of second element of cloneArr is: 999
The value of second element of arr is: 777
The value of second element of cloneArr is: 999
public class MultiDArrClone {
public static void main(String[] args){
int [][] multiArr = new int[2][3];
int [][] cloneMultiArr = multiArr.clone();//让cloneMultiArr指向clone数组,被复制的数组时multiArr直接指向的那个数组,但数组元素指向的内容并没有被复制。
cloneMultiArr[1][2] = 999;
System.out.println("The value of multiArr[1][2] is: " + multiArr[1][2]);
System.out.println("The value of cloneMultiArr[1][2] is: " + cloneMultiArr[1][2]);
cloneMultiArr[1] = multiArr[1].clone();//multiArr[1]和cloneMultiArr[1]都是一维数组的引用,这个过程和一维数组的clone()方法的执行过程是一样的。
cloneMultiArr[1][2] = 777;
multiArr[1][2] = 999;
System.out.println("The value of multiArr[1][2] is: " + multiArr[1][2]);
System.out.println("The value of cloneMultiArr[1][2] is: " + cloneMultiArr[1][2]);
}
}
运行结果为:
The value of multiArr[1][2] is: 999
The value of cloneMultiArr[1][2] is: 999
The value of multiArr[1][2] is: 999
The value of cloneMultiArr[1][2] is: 777
注:参考《Java入门1·2·3——一个老鸟的Java学习心得》