为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2019-11-29 10:50:31
如果我clone()在类型A的对象数组上调用方法,它将如何克隆其元素?副本将引用相同的对象吗?还是会要求(element of type A).clone()他们每个人?
查看完整描述

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  

-----  


查看完整回答
反对 回复 2019-11-29
?
长风秋雁

TA贡献1757条经验 获得超7个赞

如果我在类型A的对象数组上调用clone()方法,它将如何克隆其元素?


数组的元素将不会被克隆。


副本将引用相同的对象吗?


是。


还是会为它们每个调用(A类型的元素).clone()?


不,它不会调用clone()任何元素。


查看完整回答
反对 回复 2019-11-29
?
吃鸡游戏

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

}


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信