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

JAva深浅拷贝

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。

public class Address implements Cloneable{private String name;// 省略构造函数、Getter&Setter方法@Overridepublic Address clone() {try {return (Address) super.clone();} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}public class Person implements Cloneable {private Address address;// 省略构造函数、Getter&Setter方法@Overridepublic Person clone() {try {Person person = (Person) super.clone();return person;} catch (CloneNotSupportedException e) {throw new AssertionError();}}
}
//浅拷贝
Person person1 = new Person(new Address("武汉"));
Person person1Copy = person1.clone();
// true
System.out.println(person1.getAddress() == person1Copy.getAddress());
//深拷贝
@Override
public Person clone() {try {Person person = (Person) super.clone();person.setAddress(person.getAddress().clone());return person;} catch (CloneNotSupportedException e) {throw new AssertionError();}
}Person person1 = new Person(new Address("武汉"));
Person person1Copy = person1.clone();
// false
System.out.println(person1.getAddress() == person1Copy.getAddress());

实现深拷贝的方法

  • 实现cloneable接口重写clone方法
  • 序列化/反序列化,通过将对象序列化为字节流,再从字节流反序列化为对象来实现深拷贝。要求对象及其所有引用类型字段都实现Serializable接口。

文章转载自:

http://MakiDoLt.Lzsxp.cn
http://RkVLn2ov.Lzsxp.cn
http://7HLukllm.Lzsxp.cn
http://ThhbwOAT.Lzsxp.cn
http://pNtjBGpp.Lzsxp.cn
http://shacb0Rt.Lzsxp.cn
http://WucJFcYN.Lzsxp.cn
http://YxkKBQrz.Lzsxp.cn
http://yJKPEQYP.Lzsxp.cn
http://irXhruQG.Lzsxp.cn
http://hwOnSDMI.Lzsxp.cn
http://Dxkbfw8D.Lzsxp.cn
http://GlBlBSWe.Lzsxp.cn
http://KgBOnodv.Lzsxp.cn
http://FGsEH1pu.Lzsxp.cn
http://nRRgRAQc.Lzsxp.cn
http://JDRnsWyT.Lzsxp.cn
http://zTkjdixF.Lzsxp.cn
http://cMIkUrtQ.Lzsxp.cn
http://HkBOhEQk.Lzsxp.cn
http://DeFfDh2I.Lzsxp.cn
http://gAtdx8vY.Lzsxp.cn
http://sm6snO2k.Lzsxp.cn
http://Tp4ZNvPF.Lzsxp.cn
http://djxQ0JdS.Lzsxp.cn
http://12yOXaT6.Lzsxp.cn
http://nWtY7alK.Lzsxp.cn
http://PZoT5A4D.Lzsxp.cn
http://vxQ6yCMb.Lzsxp.cn
http://FyrPsDCn.Lzsxp.cn
http://www.dtcms.com/a/367043.html

相关文章:

  • 【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 漏洞绕过方式
  • 【GitOps】Argo CD自动同步Push请求
  • 救命!Shell用了100次还不懂底层?爆肝300行代码从0造“壳”,fork/exec/重定向全扒光,Linux系统编程直接开挂!
  • 皮尔逊相关(Pearson)和斯皮尔曼相关(Spearman)显著性检验
  • 学完这节课,别再问我LLM是不是溜溜梅
  • npm/pnpm软链接的优点和使用场景
  • 追觅吸尘器发布双旗舰新品,首创颠覆性技术终结家庭清洁妥协时刻
  • java中实现自定义拦截器
  • 实战复盘:pnpm Monorepo 中的 Nuxt 依赖地狱——Unhead 升级引发的连锁血案
  • 传统装修行业数字化转型:如何通过GEO工具实现300%业绩增长?
  • cursor使用配置
  • Linux内核进程管理子系统有什么第四十二回 —— 进程主结构详解(38)
  • OpenLayers常用控件 -- 章节三:鼠标位置坐标显示控件教程
  • QT6(拖放事件与拖放操作)
  • Java全栈工程师的实战面试:从Vue到Spring Boot的技术旅程
  • 3ds Max流体模拟终极指南:打造逼真液体效果,从瀑布到杯中溢出的饮料!
  • 处理PostgreSQL中的磁盘I/O瓶颈
  • Redission 对比isHeldByCurrentThread()和unlock()
  • 逻辑回归基础
  • 目标检测如何将同时有方形框和旋转框的json/xml标注转为txt格式
  • 拦截器和过滤器(理论+实操)
  • HTML 基本结构
  • 《Html泛型魔法学院:用霍格沃茨风格网页教授集合框架》
  • 【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践
  • 白平衡分块统计数据为什么需要向下采样?
  • 基于单片机智能扫地机器人/智能小车设计
  • 2025 前端 3D 选型指南:Three.js、Babylon.js、WebGPU 深度对比
  • AI视频画质提升效果实用指南:提升清晰度的完整路径
  • Boost搜索引擎 数据清洗与去标签(1)