【问题标题】:how to deep copy object in java? [duplicate]如何在java中深度复制对象? [复制]
【发布时间】: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 ?
}

【问题讨论】:

标签: java class object deep-copy


【解决方案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

    【讨论】:

    • 感谢您的链接!确实非常有用的文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多