一.总结
| 特性 |
浅拷贝 |
深拷贝 |
| 新对象创建 |
是 |
是 |
| 基本类型成员拷贝 |
复制实际值 |
复制实际值 |
| 引用类型成员拷贝 |
复制引用地址(共享堆对象) |
复制实际堆对象(完全独立) |
| 对象独立性 |
不独立(引用类型成员共享) |
完全独立(无任何共享资源) |
| 修改影响 |
引用类型成员修改会相互影响 |
彼此修改无任何影响 |
二.浅拷贝
复制代码
// 测试浅拷贝
public class ShallowCopyTest {
public static void main(String[] args) throws CloneNotSupportedException {
// 1. 创建原对象
Hobby hobby = new Hobby("篮球");
List<String> tags = new ArrayList<>();
tags.add("学生");
tags.add("运动爱好者");
User originalUser = new User(1, "张三", hobby, tags);
// 2. 浅拷贝生成新对象
User cloneUser = (User) originalUser.clone();
// 3. 修改原对象的基本类型成员
originalUser.setId(2);
// 4. 修改原对象的引用类型成员(Hobby 和 List)
originalUser.getHobby().setName("足球");
originalUser.getTags().add("男生");
// 5. 打印结果
System.out.println("原对象:" + originalUser);
System.out.println("拷贝对象:" + cloneUser);
// 结果分析:
// 1. 基本类型 id:原对象修改为 2,拷贝对象仍为 1(互不影响)
// 2. 引用类型 Hobby:原对象修改为足球,拷贝对象也变为足球(共享堆对象)
// 3. 引用类型 List:原对象添加"男生",拷贝对象也包含该元素(共享堆对象)
}
}