Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
持久化对象';在Java中复制后的s值_Java_Object - Fatal编程技术网

持久化对象';在Java中复制后的s值

持久化对象';在Java中复制后的s值,java,object,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.

我的示例代码-

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
是不可变的(值应该保持不变),有没有办法做到这一点?

使用赋值语句,
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;
   }        
}

通过使用赋值语句,
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;
   }        
}

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

您需要深度复制对象。或者至少使用
clone
方法复制它。

(或者)您应该实现自己的构造函数来正确复制
DataObj
。(或者)您应该实现自己的构造函数,以正确地复制
DataObj
。请您以代码片段的形式给我一个关于示例代码的示例,好吗?那么,我是否应该用这一行代替直接赋值“dataObj1=dataObj.clone();”?@user3652212我编辑了我的答案。复制构造函数优先于克隆()。“谢谢,帮了我很多忙!你能给我一个关于我的示例代码的代码片段形式的例子吗?那么,我是否应该用这一行代替直接赋值“dataObj1=dataObj.clone();”?@user3652212我编辑了我的答案。复制构造函数优先于克隆()。“谢谢,帮了我很多忙!看,看。