在 Java 中,clone() 方法用于创建对象的副本,但浅拷贝(Shallow Copy) 是常见错误,尤其当对象包含可变引用字段时。以下是典型错误及修复方案:
❌ 错误实现示例(浅拷贝问题)
java
class Person implements Cloneable {
private String name;
private List<String> hobbies; // 可变引用字段
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
// 错误:浅拷贝 clone() 方法
@Override
public Person clone() {
try {
return (Person) super.clone(); // 仅复制引用,不复制列表内容
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
}
问题:
克隆后的对象与原对象共享同一个 hobbies 列表。修改任一对象的 hobbies 会影响另一个对象。
✅ 修复方案 1:深度拷贝(Deep Copy)
手动复制所有可变引用字段:
java
@Override
public Person clone() {
try {
Person cloned = (Person) super.clone();
// 深度拷贝:创建新的

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



