来自Object#clone()
注意,所有数组都被认为是实现接口
Cloneable的。否则,此方法将创建该对象类的新实例,并使用该对象相应字段的内容初始化其所有字段,就好像通过赋值一样;字段的内容本身并不是克隆的。因此,该方法执行该对象的“浅拷贝”,而不是“深度复制”操作。
但java.util.Arrays并没有指出Arrays implements Cloneable。
数组如何实现Cloneable
发布于 2013-11-08 06:24:10
您混淆了java.util.Arrays,它是一个普通的类,包含用于处理数组的方法,以及数组本身,它们在Java语言中是一个相当特殊的构造,但仍然是具有合成类的对象。这是实现Cloneable的这个类。它还直接来自Object。看看数组上的JLS页面,它在这个问题上非常清楚。
例如,查看以下代码(摘自上述JLS):
class Test {
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
}这将打印:
class [I
class java.lang.Object发布于 2013-11-08 06:24:39
java.util.Arrays是一个包含在Java数组上操作的实用程序的类,不能与数组本身混淆。
数组是一个容器对象,它持有固定数量的单个类型的值。它们是在Java语言中明确定义的一种特殊类型的对象。所有Java数组都实现了java.lang.Cloneable和java.io.Serializable。
另一方面,java.util.Arrays不实现这些接口,只提供实现在数组上执行的公共函数的静态方法。
当您克隆一个一维数组(如Object[] )时,将对包含原始数组元素的副本(而不是引用)的新数组执行“深度复制”。
然而,多维数组(如Object[][])的克隆是一个“浅拷贝”,也就是说,它只创建一个新数组,每个元素数组都引用原始元素数组。
https://stackoverflow.com/questions/19852751
复制相似问题