3 回答
TA贡献1784条经验 获得超7个赞
clone()创建一个浅表副本。这意味着将不会克隆元素。(如果他们没有执行该Cloneable怎么办?)
您可能想要Arrays.copyOf(..)复制数组而不是使用复制clone()(尽管克隆适用于数组,与其他方法不同)
如果要深度克隆,请检查此答案
一个小例子来说明clone()即使这些元素是浅薄的Cloneable:
ArrayList[] array = new ArrayList[] {new ArrayList(), new ArrayList()};
ArrayList[] clone = array.clone();
for (int i = 0; i < clone.length; i ++) {
System.out.println(System.identityHashCode(array[i]));
System.out.println(System.identityHashCode(clone[i]));
System.out.println(System.identityHashCode(array[i].clone()));
System.out.println("-----");
}
印刷品:
4384790
4384790
9634993
-----
1641745
1641745
11077203
-----
TA贡献1757条经验 获得超7个赞
如果我在类型A的对象数组上调用clone()方法,它将如何克隆其元素?
数组的元素将不会被克隆。
副本将引用相同的对象吗?
是。
还是会为它们每个调用(A类型的元素).clone()?
不,它不会调用clone()任何元素。
TA贡献1829条经验 获得超7个赞
一维基元数组在克隆时会复制元素。这诱使我们克隆二维数组(Array of Arrays)。
请记住,由于的浅拷贝实现,二维数组克隆不起作用clone()。
public static void main(String[] args) {
int row1[] = {0,1,2,3};
int row2[] = row1.clone();
row2[0] = 10;
System.out.println(row1[0] == row2[0]); // prints false
int table1[][]={{0,1,2,3},{11,12,13,14}};
int table2[][] = table1.clone();
table2[0][0] = 100;
System.out.println(table1[0][0] == table2[0][0]); //prints true
}
添加回答
举报