Java 复制对成员数据具有共享引用的对象

Java 复制对成员数据具有共享引用的对象,java,clone,deep-copy,Java,Clone,Deep Copy,我有一个JavaWebApp,它可以提取员工的记录,并将其存储在自制的数据持有者对象中,非常奇怪地称为“EmployeeRecordDataHolder” 我想在更新过程开始时复制一份EmployeeRecordDataHolder,这样我就可以进行比较,报告数据是如何更改的 我在对成员数据的原始和副本共享引用方面遇到了一些问题,结果是原始数据没有保持未更新状态 我最初通过HashMap从数据库中获取数据。如果我从HashMap get()中填充了两个对象(原始对象和副本),那么这两个对象是否仍

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

我想在更新过程开始时复制一份EmployeeRecordDataHolder,这样我就可以进行比较,报告数据是如何更改的

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

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

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

copyDataHolderObj.setSomePieceOfData(  originalDataHolderObj.getSomePieceOfData() );
这种方法会导致两个对象相互独立地改变吗

非常感谢


史蒂夫

回答你的第一个问题:

是的,两者都将共享对同一对象的引用
HashMap
存储引用,因此对原始对象执行任何更新。佩奇清楚地解释了这些变化的反映

回答你的第二个问题:


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

这样做类似于:copyDataHolderObj.setSomePieceOfData(originalDataHolderObj.getSomePieceOfData());在所有数据上,值将为我提供两个对象,我可以彼此独立地更新,而不会影响另一个对象中的值?是的。假设您正在创建一个新对象,即
ClassName copyDataHolderObj=new ClassName()其中ClassName是必需的类。