在Java中复制后保留对象的值

时间:2015-06-22 19:15:43

标签: java object

我的示例代码 -

private final DataObj dataObj = getDataObjs();

private final DataObj dataObj1 = new DataObjImpl();
dataObj1 = dataObj; //I need the value of dataObj1 to be the same even if the value of dataObj is modified anywhere further down in a class.

我的问题是,如果正在修改对象dataObj的值,那么第二个对象dataObj1的值也会被修改,但我需要第二个对象dataObj1是不可变的(价值应该坚持),有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

通过使用赋值语句dataObj1 = dataObj;dataObj1完全相同的对象称为dataObj。解决方案是分配dataObj引用的对象的副本。一种方法是通过复制构造函数,如:

dataObj1 = new DataObjImpl(dataObj);

以下是一个例子:

class DataObjImpl {

   private Object data;

   public Object getData() {
      return data;
   }

   public void setData(Object data) {
      this.data = data;
   }

   // copy constructor
   public DataObjImpl(DataObjImpl obj) {
      this.data = obj.data;
   }        
}

答案 1 :(得分:1)

您需要深层复制对象。或者至少使用clone方法将其复制过来。