请注意,所有数组都被视为实现接口
Cloneable.否则,此方法创建此对象的类的新实例,并使用该对象的相应字段的内容初始化其所有字段,就像通过赋值一样; 这些字段的内容本身不会被克隆.因此,该方法执行该对象的"浅拷贝",而不是"深拷贝"操作.
但文档java.util.Arrays并未表明这一点Arrays implements Cloneable.
阵列如何实现Cloneable?
令人困惑的是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());
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印:
class [I
class java.lang.Object
Run Code Online (Sandbox Code Playgroud)
java.util.Arrays 是一个类,其中包含可在Java数组上运行的实用程序,不要与数组本身混淆。
数组是一个包含固定数量的单一类型值的容器对象。它们是用Java语言明确定义的一种特殊类型的对象。所有Java数组都实现java.lang.Cloneable和java.io.Serializable。
java.util.Arrays另一方面,它不实现这些接口,仅提供实现在数组上执行的常用功能的静态方法。
当您克隆一维数组(例如)时Object[],会对包含原始数组元素副本(而不是引用)的新数组执行“深层复制”。
多维数组(如Object[][])的克隆是“浅表副本”,也就是说,它仅创建一个新数组,每个元素数组都引用原始元素数组。
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |