持久化对象';在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我编辑了我的答案。复制构造函数优先于克隆()。“谢谢,帮了我很多忙!看,看。