Avatar ·

如何在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(); } } ``` 但当我克隆并修改副本的地址时,原对象的地址也发生了变化。我了解到这被称为