引言:一个诡异的Bug
想象一下这个场景:你从数据库查询出一个订单对象 (OrderEntity),小心翼翼地将其转换为返回给前端的DTO对象 (OrderDTO),然后修改了DTO中的用户地址信息。然而,在一次数据审计中,你惊恐地发现——数据库里的原始用户地址竟然也被改变了!
这个诡异的“幽灵事件”的根源,很可能就是拷贝操作使用不当。在Java世界中,深拷贝(Deep Copy) 与 浅拷贝(Shallow Copy) 是每个开发者必须透彻理解的核心概念。它们看似简单,却暗藏玄机,是许多生产Bug的罪魁祸首。
本文将带你从基本概念出发,通过生动的比喻和实际的代码示例,彻底弄懂两者的区别、实现方式,并最终给出行业内的最佳实践方案。
一、核心概念:用“钥匙和房子”理解拷贝
理解深浅拷贝的关键在于理解Java中基本数据类型和引用数据类型在内存中的不同。
-
基本类型(int, double, char等):变量直接存储值本身。就像你口袋里的现金,给你就是你的了。
-
引用类型(对象、数组):变量存储的是对象的内存地址(引用),而不是对象本身。就像一把钥匙,它本身不是房子,但它能让你找到并操作房子。
基于这个前提,我们来看看两种拷贝:
1. 浅拷贝 (Shallow Copy) - “配钥匙”
操作:创建一个新对象,然后复制原对象的每一个字段。
-
对于基本类型字段:直接复制其值
Java深浅拷贝详解与实践指南

最低0.47元/天 解锁文章
834

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



