有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想在java中复制一个对象而不复制引用

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

但o2不应复制o1的参考值。因此,o2中的任何变化不得影响o1

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


共 (3) 个答案

  1. # 1 楼答案

    您可以重写clone()方法,该方法将创建整个对象图的副本(深度副本)并创建新对象

    注意:每个类都将从Object类继承默认的clone()实现。但必须重写该方法才能根据对象的内容执行复制

    仅供参考:

    The default Object.clone() is a shallow copy. However, it's designed to throw a CloneNotSupportedException unless your object implements Cloneable.

    And when you implement Cloneable, you should override clone() to make it do a deep copy, by calling clone() on all fields that are themselves cloneable.

  2. # 2 楼答案

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

    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. # 3 楼答案

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

    Object o2 = o1.clone();