深浅拷贝--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:原对象添加"男生",拷贝对象也包含该元素(共享堆对象)
    }
}
相关推荐
csbysj20205 分钟前
CSS !important:深度解析与最佳实践
开发语言
善恶怪客8 分钟前
Java-数据类型
java
初心未改HD9 分钟前
Go语言测试与Benchmark:测试驱动开发的实践指南
开发语言·golang
学习3人组14 分钟前
Mes全连路架构图
java·erp
chxii17 分钟前
lua流程控制语句和table(表)数据结构
开发语言·junit·lua
上弦月-编程19 分钟前
C语言指针从入门到实战
java·jvm·算法
Cyan_RA920 分钟前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
逻辑驱动的ken24 分钟前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
W.A委员会26 分钟前
多行溢出在末尾添加省略号
开发语言·javascript·css
bzmK1DTbd26 分钟前
Java游戏服务器:Netty框架的高并发网络通信
java·服务器·游戏