如何在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 吗? 是的,但是Integer
s 是不可变的,所以没关系。
所以你的意思是如果我在 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中深度复制对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章