在数组上调用clone()是否还会克隆其内容?

如果我clone()在类型A的对象数组上调用方法,它将如何克隆其元素?副本将引用相同的对象吗?还是会要求(element of type A).clone()他们每个人?



慕尼黑5688855
浏览 391回答 3
3回答

噜噜哒

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 ++) {&nbsp; &nbsp; System.out.println(System.identityHashCode(array[i]));&nbsp; &nbsp; System.out.println(System.identityHashCode(clone[i]));&nbsp; &nbsp; System.out.println(System.identityHashCode(array[i].clone()));&nbsp; &nbsp; System.out.println("-----");}印刷品:4384790&nbsp;&nbsp;43847909634993&nbsp;&nbsp;-----&nbsp;&nbsp;1641745&nbsp;&nbsp;1641745&nbsp;&nbsp;11077203&nbsp;&nbsp;-----&nbsp;&nbsp;

长风秋雁

如果我在类型A的对象数组上调用clone()方法,它将如何克隆其元素?数组的元素将不会被克隆。副本将引用相同的对象吗?是。还是会为它们每个调用(A类型的元素).clone()?不,它不会调用clone()任何元素。

吃鸡游戏

一维基元数组在克隆时会复制元素。这诱使我们克隆二维数组(Array of Arrays)。请记住,由于的浅拷贝实现,二维数组克隆不起作用clone()。public static void main(String[] args) {&nbsp; &nbsp; int row1[] = {0,1,2,3};&nbsp; &nbsp; int row2[] =&nbsp; row1.clone();&nbsp; &nbsp; row2[0] = 10;&nbsp; &nbsp; System.out.println(row1[0] == row2[0]); // prints false&nbsp; &nbsp; int table1[][]={{0,1,2,3},{11,12,13,14}};&nbsp; &nbsp; int table2[][] = table1.clone();&nbsp; &nbsp; table2[0][0] = 100;&nbsp; &nbsp; System.out.println(table1[0][0] == table2[0][0]); //prints true}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java