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

2022-08-31 11:05:07

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


答案 1

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  
-----  

答案 2

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

不会克隆数组的元素。

副本是否会引用相同的对象?

是的。

或者它会为每个元素调用(A).clone()类型的元素??

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