.jpg)
请考虑以下代码:
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
所以,我想复制到并更改,而不会影响.但是上面的代码没有这样做。当我在 中更改某些内容时,也会发生相同的更改。dumdumtwodumdumtwodumdumtwo
我想,当我说时,Java只复制引用。那么,有没有办法创建一个新的副本并将其分配给?dumtwo = dumdumdumtwo

网友回答:
基本:Java 中的对象复制。
让我们假设一个对象 – ,它包含两个对象,containedObj1 和 containedObj2。obj1
浅拷贝:
浅拷贝创建同一类的新字段,并将所有字段复制到新实例并返回。Object 类提供了一种方法,并为浅表复制提供支持。instanceclone
Deep copying:
A deep copy occurs when an object is copied along with the objects to which it refers. Below image shows after a deep copy has been performed on it. Not only has obj1 been copied, but the objects contained within it have been copied as well. We can use to make a deep copy. Unfortunately, this approach has some problems too(detailed examples).obj1Java Object Serialization
可能的问题:
很难正确实施。
最好使用防御性复制、复制构造函数(如@egaga回复)或静态工厂方法。clone
clone()CloneableCloneableObject.cloneclone()例如org.apache.commons.lang.SerializationUtils将具有使用序列化(Source)的深度克隆方法。如果我们需要克隆 Bean,那么在 org.apache.commons.beanutils 中有几个实用程序方法(来源)。
cloneBean将基于可用的属性 getter 和 setter 克隆 bean,即使 bean 类本身没有实现 Cloneable。copyProperties对于属性名称相同的所有情况,会将属性值从源 Bean 复制到目标 Bean。
网友回答:
创建复制构造函数:
class DummyBean {
private String dummy;
public DummyBean(DummyBean another) {
this.dummy = another.dummy; // you can access
}
}
每个对象还有一个克隆方法,可用于复制对象,但不使用它。创建类并执行不正确的克隆方法太容易了。如果你要这样做,至少阅读Joshua Bloch在Effective Java中对它的看法。

网友回答:
在包中有一个方法:import org.apache.commons.lang.SerializationUtils;
SerializationUtils.clone(Object);
例:
this.myObjectCloned = SerializationUtils.clone(this.object);
模板简介:该模板名称为【有没有办法创建一个新的副本并将其分配给?dumtwo = dumdumdumtwo】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。