深浅拷贝--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:原对象添加"男生",拷贝对象也包含该元素(共享堆对象)
    }
}
相关推荐
SamDeepThinking18 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好19 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
MacroZheng20 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking20 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
Flittly2 天前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了2 天前
Java 生成二维码解决方案
java·后端
人活一口气2 天前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP2 天前
Vibe Coding -- 完整项目案例实操
java
荣码2 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing2 天前
Google第三方授权登录
java·后端·程序员