2012-05-24 41 views
2

我有一个Java web应用程序,该应用程序提取一个员工的记录并将其存储在一个自制的数据持有者对象中,称为“EmployeeRecordDataHolder”。复制一个对象并共享对成员数据的引用

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

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

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

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

copyDataHolderObj.setSomePieceOfData( originalDataHolderObj.getSomePieceOfData()); 

这种方法会产生两个可以相互独立更改的对象吗?

感谢很多提前

史蒂夫

回答

1

回答你的第一个问题:

同一个对象是,双方将共享引用。 HashMap存储引用,因此任何更新都是在原始对象上完成的。 This页面清楚地说明了这些变化已被反映出来。

回答你的第二个问题:

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

+0

所以做一些事情:copyDataHolderObj.setSomePieceOfData(originalDataHolderObj.getSomePieceOfData());在所有的数据值上会给我两个对象,我可以独立更新,而不影响其他值? – Steve

+0

是的。假设你正在创建一个新的对象,即'ClassName copyDataHolderObj = new ClassName();'其中ClassName是所需的类。 – mtk

相关问题