2014-09-25 43 views
1

我想在没有复制引用的情况下在java中复制一个对象。如何更快地创建/复制Java对象?

Object o1 = new Object(); 
Object o2 = o1; 

但o2不应复制o1的引用。因此,在o2中完成的任何更改都不会影响o1。

我们如何在java中做到这一点?

+0

clone()方法特定于Object类。如果我必须复制某些特定类的对象,我认为克隆不起作用。 – Setu 2014-09-25 07:00:34

+1

@Setu,正如下面的其他人所指出的那样,您需要为特定类重写'clone'方法。 – munyul 2014-09-25 07:06:24

回答

2

您可以使用Object.clone()的方法克隆对象:

Object o2 = o1.clone(); 
4

您可以覆盖clone()方法,这将创造整个对象图(深层副本)的复印件,并创建一个新的对象。

注意:每个班级将继承Object类的默认clone()实施。但是您必须重写该方法以根据对象的内容执行复制。

仅供参考:

默认Object.clone()是一个浅拷贝。但是,它的设计为 会引发CloneNotSupportedException,除非您的对象 实现了Cloneable。

而当你实现Cloneable时,你应该重载clone()以使其 通过在所有 本身可复制的字段上调用clone()来进行深层复制。

0

你应该使用Cloning,那么你有一个Object

Object obj2=obj.clone(); // clone() in Object class has protected modifier 

副本然后你要重写clone方法的类。

克隆?

创建并返回此对象的副本。 “复制”的确切含义可能取决于对象的类别。总的意图是 ,对于任何对象x,表达式:

1

如果需要复制其他类比对象,做一个拷贝构造函数或静态工厂方法。效果是这样的:

MyClass o1 = new MyClass(); 
MyClass o2 = new MyClass(o1); // in constructor make new object with data from o1 attributes 

MyClass o1 = new MyClass(); 
MyClass o2 = MyClass.makeCopy(o1); // make static method for create new copy (similar like above) 

不要使用克隆。 - >Effective Java