首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java数组如何实现Cloneable?

Java数组如何实现Cloneable?
EN

Stack Overflow用户
提问于 2013-11-08 06:17:29
回答 2查看 2.5K关注 0票数 5

来自Object#clone()

注意,所有数组都被认为是实现接口Cloneable的。否则,此方法将创建该对象类的新实例,并使用该对象相应字段的内容初始化其所有字段,就好像通过赋值一样;字段的内容本身并不是克隆的。因此,该方法执行该对象的“浅拷贝”,而不是“深度复制”操作。

java.util.Arrays并没有指出Arrays implements Cloneable

数组如何实现Cloneable

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 06:24:10

您混淆了java.util.Arrays,它是一个普通的类,包含用于处理数组的方法,以及数组本身,它们在Java语言中是一个相当特殊的构造,但仍然是具有合成类的对象。这是实现Cloneable的这个类。它还直接来自Object。看看数组上的JLS页面,它在这个问题上非常清楚。

例如,查看以下代码(摘自上述JLS):

代码语言:javascript
复制
class Test {
    public static void main(String[] args) {
        int[] ia = new int[3];
        System.out.println(ia.getClass());
        System.out.println(ia.getClass().getSuperclass());
    }
}

这将打印:

代码语言:javascript
复制
class [I
class java.lang.Object
票数 5
EN

Stack Overflow用户

发布于 2013-11-08 06:24:39

java.util.Arrays是一个包含在Java数组上操作的实用程序的类,不能与数组本身混淆。

数组是一个容器对象,它持有固定数量的单个类型的值。它们是在Java语言中明确定义的一种特殊类型的对象。所有Java数组都实现了java.lang.Cloneablejava.io.Serializable

另一方面,java.util.Arrays不实现这些接口,只提供实现在数组上执行的公共函数的静态方法。

当您克隆一个一维数组(如Object[] )时,将对包含原始数组元素的副本(而不是引用)的新数组执行“深度复制”。

然而,多维数组(如Object[][])的克隆是一个“浅拷贝”,也就是说,它只创建一个新数组,每个元素数组都引用原始元素数组。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19852751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档