扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者