当前位置: 首页 > news >正文

连着三次都被大厂面试问到的java面试高频题,一分钟带你彻底搞懂

一、浅拷贝是什么?

浅拷贝会创建一个新的外层对象,但内部的引用类型成员仍然指向原来的对象。

例如:

classAddress{Stringcity;}classPersonimplementsCloneable{Stringname;Addressaddress;@OverrideprotectedPersonclone()throwsCloneNotSupportedException{return(Person)super.clone();}}

执行:

Personp2=p1.clone();

此时:

p1 != p2 p1.address == p2.address

也就是说,Person被复制了,但Address仍然共用。

如果修改:

p2.address.city="上海";

那么p1.address.city也会变成“上海”。

浅拷贝常见实现方式

1. Object.clone(),默认是浅拷贝 2. 拷贝构造方法中直接复制引用 3. 手动字段赋值

例如:

this.address=other.address;

这就是浅拷贝,因为没有创建新的Address


二、深拷贝是什么?

深拷贝不仅会复制外层对象,还会把内部引用对象也重新创建一份。

例如:

classAddress{Stringcity;publicAddress(Addressother){this.city=other.city;}}classPerson{Stringname;Addressaddress;publicPerson(Personother){this.name=other.name;this.address=newAddress(other.address);}}

执行:

Personp2=newPerson(p1);

此时:

p1 != p2 p1.address != p2.address

修改p2.address不会影响p1.address

深拷贝常见实现方式

1. 在 clone() 中继续克隆内部对象 2. 深拷贝构造方法 3. 手动逐层创建新对象 4. Java 序列化 5. JSON 序列化

例如:

Personcopied=(Person)super.clone();copied.address=this.address.clone();

这样内部对象也被重新复制,才是深拷贝。


三、核心区别

对比项浅拷贝深拷贝
外层对象是否复制
内部引用对象是否复制
是否共享内部对象
修改内部对象是否互相影响不会
实现难度较低较高

四、直接赋值不属于拷贝

下面这句:

Personp2=p1;

不是浅拷贝,而只是复制了引用。

此时:

p1 和 p2 指向同一个 Person 对象

三者区别可以记成:

直接赋值:外层对象共用,内部对象也共用 浅拷贝:外层对象独立,内部对象共用 深拷贝:外层对象独立,内部对象也独立

五、实际开发怎么选?

简单对象可以使用浅拷贝。

对象中包含可变引用成员,并且不希望副本修改影响原对象时,应使用深拷贝。

实际项目中更推荐:

简单清晰:拷贝构造方法 性能优先:手动逐层复制 使用方便:JSON 序列化 传统方式:clone()

但要注意:

super.clone()

默认只实现浅拷贝,不会自动复制内部对象。


六、一句话总结

浅拷贝只复制外层对象,内部引用仍然共享;深拷贝会把内部对象也复制一份,因此新旧对象互不影响。

http://www.jsqmd.com/news/1164933/

相关文章:

  • 2026年7月最新北京百达翡丽官方售后客户服务电话及线下网点地址 - 百达翡丽服务中心
  • 三星手机真实体验指南:按需求选机型,避开参数陷阱
  • 长沙理迅事务所处理案件周期受哪些因素影响? - 品牌排行榜
  • Ruflo:Claude的神经中枢与智能体蜂群操作系统
  • Cocos游戏事件总线性能优化实战:从卡顿到丝滑的完整方案
  • TDengine Tag 索引 — 子表筛选的核心机制
  • Steam创意工坊模组免费下载神器:WorkshopDL完整使用指南
  • 匿名聊天软件安全实测:网页端轻量级平台防护机制解析
  • A3908与PIC18LF46K22在精密运动控制系统中的应用
  • Kotlin Toolchain:KMP项目结构的声明式革命
  • 5G专网接入排查记录
  • 亲身到店探访北京宇舶官方售后服务中心|地址及官方联系电话(2026年7月最新) - 亨得利官方服务中心
  • 帝舵中国官方售后服务中心|地址与24小时服务电话权威信息通知(2026年7月更新) - 帝舵中国官方服务中心
  • PPTC 自恢复保险丝选型实战:6步法精准匹配 Ihold/Vmax/Imax 三大核心参数
  • 2026年医疗器械第三方物流资质企业对比
  • 浏览器事件循环(Event Loop)
  • 阿尔忒弥斯3号登月候选:9个月球着陆点!
  • SOME/IP 服务与客户端开发:从 FIDL 定义到 CommonAPI 代码生成的 5 步实践
  • 4 种有效方法助您在 iPhone 恢复出厂设置后恢复联系人
  • Kimi编程实战指南:从AI工具到工程级第七根手指
  • 西部数据移动硬盘驱动下载 详细安装步骤教程
  • 视频生成API延迟实测:五大模型从请求到出片要等多久
  • 项目生命周期 4 阶段与 DevOps 实践:从定义到交付的敏捷融合
  • MoE稀疏混合专家模型原理与Hy3部署实践:降低大模型推理成本
  • 2026年7月车制辊筒/电动辊筒靠谱生产商推荐_江苏德胜智能物流设备有限公司 - 品牌宣传支持者
  • Unity恐怖游戏资源包导入、材质修复与AI整合实战指南
  • 亨得利官方名表服务中心|最新地址及官方客服热线权威信息通知(2026年7月最新) - 亨得利官方
  • 为什么 Data Ingestion 还没有被 Fivetran/Airbyte 完全解决?
  • 冰达ROS机器人SLAM建图实战:从激光雷达启动到地图保存的5个关键节点验证
  • 亨得利官方钟表服务专业售后维修保养中心权威公示(2026年7月最新) - 亨得利官方博客