如何在Java中正确复制对象:浅拷贝与深拷贝
大家好!我刚开始学习Java,遇到了一个让我很困惑的问题。我试图复制一个对象,但得到了意想不到的结果。假设我有一个简单的Person类,包含name和age字段,以及一个嵌套的Address对象。
当我编写:
```java
Person p1 = new Person("伊万", 30, new Address("莫斯科", "特维尔大街", 10));
Person p2 = p1;
p2.setName("彼得");
System.out.println(p1.getName()); // 输出"彼得" - 为什么?!
```
我期望p1仍然是"伊万",而p2变成"彼得"。但据我理解,这仅仅是复制引用。我尝试使用clone()方法:
```java
public class Person implements Cloneable {
private String name;
private Address address;
// 构造函数、getter、setter
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
```
但当我克隆并修改副本的地址时,原对象的地址也发生了变化。我了解到这被称为