System.arraycopy 是否使用 clone() 方法?

Does System.arraycopy use clone() method?

我有一个包含重写 clone() 方法的对象数组。当我使用 arraycopy() func 时,它会通过 clone() 方法复制每个元素还是进行浅拷贝? 谢谢

System.arraycopy 生成指定数组部分的浅表副本。

System.arraycopy(...)Arrays.copyOf(...) 都只是创建原始数组的(浅)副本;他们自己不复制或克隆包含的对象:

// given: three Person objects, fred, tom and susan
Person[] people = new Person[] { fred, tom, susan };
Person[] copy = Arrays.copyOf(people, people.length);
// true: people[i] == copy[i] for i = 0..2

如果您真的想复制对象本身,则必须手动执行此操作。如果对象是 Cloneable:

,一个简单的 for 循环应该可以
Person[] copy = new Person[people.length];
for(int i = 0; i < people.length; ++i) copy[i] = people[i].clone();

自 Java 8:

以来,提供了另一个可能更优雅的解决方案
Person[] copy = Arrays.stream(people).map(Person::clone).toArray(Person[]::new);