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

java - 深拷贝 浅拷贝

一.定义

1.浅拷贝

1.定义

浅拷贝只复制对象的引用,不复制引用指向的实际对象。对基本数据类型复制值,对引用类型的值复制其引用。

2.实现方法

通过重写Object类的clone()方法,并让类实现Cloneable接口

3.代码示例
// 浅拷贝
public class Student implements Cloneable{int age;String name;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

2.深拷贝

1.定义

深拷贝不止复制对象本身,还递归复制对象中所有引用的对象,使新对象和旧对象之间完全独立

2.实现方法

1.让所有嵌套的引用类型也实现 Cloneable 接口并重写 clone(),在顶层对象的 clone() 中递归调用嵌套对象的 clone()

2.通过序列化将对象写入流,再从流中读取,序列化方式简单易用,但性能较低

3.代码示例
1.递归调用
class Address implements Cloneable {String city;public Address(String city) {this.city = city;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}class Person implements Cloneable {String name;Address addr; public Person(String name, Address addr) {this.name = name;this.addr = addr;}@Overrideprotected Object clone() throws CloneNotSupportedException {Person copy = (Person) super.clone();copy.addr = (Address) this.addr.clone(); return copy;}
}
2.序列化
class Address implements Serializable {String city;public Address(String city) {this.city = city;}
}class Person implements Serializable {String name;Address addr;public Person(String name, Address addr) {this.name = name;this.addr = addr;}Person deepCopy() throws Exception {// 写入字节流ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);// 将字节序列恢复为新对象ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));return (Person) ois.readObject();}
}

http://www.xdnf.cn/news/17185.html

相关文章:

  • 大模型2位量化原理解析
  • 【线性代数】5特征值和特征向量
  • “认知裂缝边缘”地带
  • 共识算法介绍
  • DrissionPage自动化:高效Web操作新选择
  • uniapp-vue2导航栏全局自动下拉变色
  • 360纳米AI、实在Agent、CrewAI与AutoGen……浅析多智能体协作系统
  • 下载 | Windows Server 2016最新原版ISO映像!(集成7月更新、标准版、数据中心版、14393.8246)
  • 智能制造的中枢神经工控机在自动化产线中的关键角色
  • 恒虚警检测(CFAR)仿真:杂波边缘与多目标场景分析
  • 代码随想录算法训练营 Day20
  • Oracle 19C In-Memory 列存储技术测试
  • Numpy科学计算与数据分析:Numpy数组创建与应用入门
  • TypeScript 中高频出现的类型结构与用法
  • C++模板知识点6『拆分模板参数』
  • 任务进度状态同步 万能版 参考 工厂+策略+观察者设计模式 +锁设计 springboot+redission
  • C++ 类和对象(2)
  • 顺序表——C语言
  • C++之队列浅析
  • SpringBoot学习日记 Day5:解锁企业级开发核心技能
  • 亚马逊采购风控突围:构建深度隐匿的环境安全体系
  • 剧本杀小程序系统开发:推动社交娱乐产业创新发展
  • TikTok Shop冷启动破局战:亚矩阵云手机打造爆款账号矩阵
  • 项目构想|文生图小程序
  • 人工智能2.0时代的人才培养和通识教育
  • 动手学深度学习(pytorch版):第一节——引言
  • Redis学习总结(持续更新)
  • 【45】C++函数重载是什么?函数重载需要注意什么?为什么C++支持函数重载,C语言不支持函数重载?C++和C语言代码之间如何相互调用?
  • 仓库管理系统-20-前端之记录管理的联表查询
  • 2025最新国内服务器可用docker源仓库地址大全(2025年8月更新)