如何在java中深度复制对象? [复制]

Posted

技术标签:

【中文标题】如何在java中深度复制对象? [复制]【英文标题】:how to deep copy object in java? [duplicate] 【发布时间】:2011-07-25 16:45:52 【问题描述】:

可能重复:How do I copy an object in Java?

在java中可以这样做吗?

public class CacheTree 

    private Multimap<Integer, Integer> a;
    private Integer                    b;

        public void copy(CacheTree anotherObj) 
            this.a = anotherObj.getA();
            this.b = anotherObj.getB();
        

       public Multimap<Integer, Integer> getA() 
            return a;
       

       public Integer getB() 
            return b;
       


public void main() 
     CacheTree x = new CacheTree();
     CacheTree y = new CacheTree();

     x.copy(y);      // Is it ok ?

【问题讨论】:

***.com/questions/64036/… 【参考方案1】:

这不是一个副本——两个对象仍然引用同一个地图。

您需要显式创建一个新的MultiMap 实例并复制原始实例中的内容。

【讨论】:

【参考方案2】:

x.a 将引用与 y.a 相同的 Multimap - 如果您向其中添加/删除元素,它将同时反映在两者中。

this.a = new Multimap<Integer, Integer>();
this.a.addAll(anotherObj.getA())

这是一个深拷贝。

【讨论】:

整数 x.b 怎么样?它是指相同的 y.b 吗? 是的,但是Integers 是不可变的,所以没关系。 所以你的意思是如果我在 x.b 中进行更改,这不会改变 y.b 吗? @tsubasa:不能在x.b 中进行更改,只能将x.b 更改为另一个Integer 对象(这不会影响y.b 中的Integer 对象)。跨度> 我认为第二行应该是this.a.addAll(anotherObj.getA())而不是getB()【参考方案3】:

请参阅这篇文章,在第 2 页中给出了一个非常好的示例代码。 还解释了java中深拷贝的概念

http://www.javaworld.com/javaworld/javatips/jw-javatip76.html

【讨论】:

感谢您的链接!确实非常有用的文章。

以上是关于如何在java中深度复制对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

JS中如何更加深度的复制对象

如何覆盖 Python 对象的复制/深度复制操作?

如何在不替换 ES6/Javascript 中的整个属性的情况下深度复制对象 [重复]

JS中实现深度拷贝,复制一个对象

如何深度复制一个javascript对象

在javascript中将对象数组复制到另一个数组中(深度复制)