使用共享引用复制对象到成员数据

时间:2012-05-24 14:22:55

标签: java clone deep-copy

我有一个Java webapp,它可以提取员工的记录并将其存储在一个自制的数据持有者对象中,称为“EmployeeRecordDataHolder”。奇怪的是“EmployeeRecordDataHolder”。

我想在更新过程开始时制作EmployeeRecordDataHolder的副本,以便我可以进行比较以报告数据如何变化。

我遇到了对原始数据和副本共享对成员数据的引用的一些问题,结果是原始数据没有保持不更新。

我最初通过HashMap从数据库中获取数据。如果我从HashMap get()填充两个对象,原始和副本,两个对象是否仍然共享对数据的相同引用,导致更改一个对象中的数据的情况也会在副本中更改它?

如果我使用HashMap填充原始对象,然后通过调用副本上所有setter中orignal上的所有getter来制作副本,该怎么办?例如:

copyDataHolderObj.setSomePieceOfData(  originalDataHolderObj.getSomePieceOfData() );

此方法会导致两个对象可以彼此独立地更改吗?

非常感谢提前

史蒂夫

1 个答案:

答案 0 :(得分:1)

回答你的第一个问题:

是的,两者都将共享对同一对象的引用。 HashMap存储引用,因此完成的任何更新都是在原始对象上完成的。 This页明确说明了这些变化已经反映出来。

回答你的第二个问题:

你可以这样做。创建所有对象的副本。