深浅拷贝--Java

一.总结

特性 浅拷贝 深拷贝
新对象创建
基本类型成员拷贝 复制实际值 复制实际值
引用类型成员拷贝 复制引用地址(共享堆对象) 复制实际堆对象(完全独立)
对象独立性 不独立(引用类型成员共享) 完全独立(无任何共享资源)
修改影响 引用类型成员修改会相互影响 彼此修改无任何影响

二.浅拷贝

复制代码
// 测试浅拷贝
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:原对象添加"男生",拷贝对象也包含该元素(共享堆对象)
    }
}
相关推荐
潲爺21 小时前
Java笔记总结
java·开发语言·笔记·学习
菜的不敢吱声21 小时前
swift学习第一天
开发语言·学习·swift
培林将军21 小时前
C语言指针
c语言·开发语言·算法
云栖梦泽21 小时前
鸿蒙分布式应用全链路性能调优实战
开发语言·鸿蒙系统
jyd012421 小时前
Spring Boot 文件上传大小限制问题:413 与 MaxUploadSizeExceededException 解决方案
java·spring boot·后端
yongui4783421 小时前
基于卡尔曼滤波的电池荷电状态(SOC)估计的MATLAB实现
开发语言·算法·matlab
絔宝21 小时前
Eclipse配置 Maven 国内镜像
java·eclipse·maven
虾说羊1 天前
Spring Boot前后端分离项目部署
java·spring boot·后端
yuan199971 天前
H264视频压缩matlab帧内预测帧间预测熵编码
开发语言·matlab