科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何克隆Java对象

如何克隆Java对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java对所有引用类型使用一个特殊的clone()方法,为对象复制自身提供一个标准的机制。以下是你需要了解和克隆Java对象有关的细节。

作者:builder.com.cn 2007年6月29日

关键字: 对象 JAVA克隆 java

  • 评论
  • 分享微博
  • 分享邮件

Java中的对象涉及使用引用类型,没有直接的方法可将一个对象的内容复制到一个新对象中。将一个引用分配给另一个引用只会给相同对象建立另一个引用。

因此,Java对所有引用类型使用一个特殊的clone()方法,为对象复制自身提供一个标准的机制。以下是你需要了解和克隆Java对象有关的细节。

为何建立一个本地拷贝?

给一个对象建立本地拷贝的原因很可能是由于你计划修改该对象,并且你不想修改方法调用者的对象。如果你确定你需要一个本地拷贝,你可以使用Object类的clone()方法来执行这项操作。

clone()方法被定义为受保护方法,但你必须在你希望克隆的所有子类中重新公开定义它。

例如,标准库类ArrayList忽略clone(),但你可以这样为ArrayList调用clone()方法:

import java.util.*;class MyInt {

private int i;

public MyInt(int ii) { i = ii; }

public void increment() { i++; }

public String toString() {

return Integer.toString(i);

}

}public class Test {

public static void main(String[] args) {

ArrayList al = new ArrayList();

for(int i = 0; i < 10; i++ )

al.add(new MyInt(i));

ArrayList al1 = (ArrayList)al.clone();

// Increment all al1's elements:

for(Iterator e = al1.iterator(); e.hasNext(); )

((MyInt)e.next()).increment();}

}

clone()方法生成一个Object,它必须重新转变为适当的类型。这个例子说明ArrayList的clone()方法如何不能自动克隆ArrayList包含的每一个对象——原有ArrayList和克隆后的ArrayList是相同对象的别名。

这种情况通常叫做浅拷贝,因为它仅仅复制一个对象的“表面”部分。实际的对象由这个“表面”,引用指向的所有对象,以及那些对象指向的所有对象等构成。这往往被称作“对象网络”。如果你拷贝所有这些内容,则被称为深拷贝。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章