考虑下面的代码:

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'

所以,我想把dum复制到dumtwo,在不影响dumtwo的情况下改变dum.但上面的代码并没有这样做.当我在dum年改变一些东西时,同样的变化也在dumtwo年发生.

我猜,当我说dumtwo = dum的时候,Java会复制reference only.那么,有没有办法创建dum的新副本并将其分配给dumtwo呢?

推荐答案

创建副本构造函数:

class DummyBean {
  private String dummy;

  public DummyBean(DummyBean another) {
    this.dummy = another.dummy; // you can access  
  }
}

每个对象都有一个克隆方法,可以用来复制对象,但不要使用它.创建一个类并执行不正确的克隆方法太容易了.如果你打算这么做,至少读一下约书亚·布洛赫在《100》中对它的 comments .

Java相关问答推荐

如何用Java表示C++类以通过FFI使用?

Spring Jpa findById会导致StackOverFlow错误,但其他查询没有问题

Java SSLocket查明客户端是否发送了证书

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

@ EnableRouting注释在Kotlin项目中不工作

如何在SystemiccationRetryListenerSupport中获得类级别的spring retryable annotation中指定的标签?

工件部署期间出错[Tomcat 8.5.45]

Java中如何根据Font.canDisplay方法对字符串进行分段

如何创建同一类的另一个对象,该对象位于变量中?

获取字符串中带空格的数字和Java中的字符

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

使用GridBagLayout正确渲染

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

IntelliJ IDEA依赖项工具窗口丢失

将stringBuilder + forloop转换为stream + map

Java在操作多个属性和锁定锁对象时使用同步和易失性

无法在Java中获取ElastiCache的AWS CloudWatch指标

为什么Spring要更改Java版本配置以及如何正确设置?

如何从指定某些字段的父对象创建子对象