如何更快地在Java中创建/复制对象?

时间:2014-09-25 06:56:56

标签: java object

我想在不复制引用的情况下复制java中的对象。

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

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

我们如何在java中执行此操作?

4 个答案:

答案 0 :(得分:4)

您可以覆盖clone()方法,该方法将创建整个对象图(深层副本)的副本并创建新对象。

注意:每个类都将继承Object类的默认clone()实现。但是,您必须根据对象的内容覆盖执行复制的方法。

仅供参考:

  

默认的Object.clone()是浅拷贝。但是,它是   旨在抛出CloneNotSupportedException,除非你的对象   实现Cloneable。

     

当你实现Cloneable时,你应该覆盖clone()来制作   它通过在所有字段上调用clone()来执行深层复制   他们自己可以克隆。

答案 1 :(得分:2)

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

Object o2 = o1.clone();

答案 2 :(得分:1)

如果需要复制除Object之外的其他类,请创建复制构造函数或静态工厂方法。效果是这样的:

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

答案 3 :(得分:0)

您应该使用Cloning,然后您拥有Object

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

然后你必须在你的班级中重写克隆方法。

克隆

  

创建并返回此对象的副本。的确切含义   "拷贝"可能取决于对象的类。一般意图是   对于任何对象x,表达式为: