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

什么是深拷贝和浅拷贝?

浅拷贝

浅拷贝是指将一个对象复制到另一个变量中,但是复制的是对象的地址,而不是对对象本身进行复制。原始对象的引用和复制对象的引用时期上是共享同一个内存地址的。

所以我们修改了复制引用指向的对象中的属性或方法,原始引用指向的对象的属性或元素也会被修改。

Java中我们常使用的BeanUtils基本也都是浅拷贝。

适用场景:浅拷贝的好处就是性能比较好,他只需要做一个引用地址的复制就可以了。

当我们希望两个或者多个对象共享部分数据的时候就可以使用浅拷贝。

深拷贝

深拷贝是指将一个对象及其子对象都复制到另一个变量中,他会创建一个全新的对象,并且将原始对象中的所有属性或者方法都复制到新的对象中。

所以我们在修改复制对象中的元素时,原始对象中的元素不会改变。

适用场景:深拷贝的好处就是两个对象完全隔离的。当我们需要完全独立的对象副本时,就需要用到深拷贝。

实现浅拷贝

可以使用BeanUtils.copyProperties来进行浅拷贝。

实现深拷贝

实现Cloneable接口,重写clone()

在Object的类中定义了一个clone方法,这个方法在不重写的情况下时浅拷贝的。

如果想要实现深拷贝就需要重写clone方法,如果想要重写clone方法就必须实现Cloneable接口,否则就会报CloneNotSupportedException异常。

序列化实现深拷贝

先把对象进行序列化成流,再将流序列化成对象,这个对象就是独立于原来对象的新对象了。

相关文章:

  • 微服务架构的优势 与 不足
  • 常见排序算法之选择排序
  • 内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机
  • 微信生态系统介绍
  • Android 待办类应用提醒功能的实现及其问题
  • ⌈ 传知代码 ⌋ 高速公路车辆速度检测软件
  • 全同态加密生态项目盘点:FHE技术的崛起以及应用
  • 编译链接问题
  • 面试的内容
  • java面试(多线程)
  • Canny算子
  • 幼儿园老师投稿渠道
  • 01 一文理解,Prometheus详细介绍
  • Java-Stream流-概述、创建、使用:遍历/匹配、筛选、聚合、映射、归约、排序、提取/组合
  • LeetCode hot100-51-G
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【RocksDB】TransactionDB源码分析
  • Android单元测试 - 几个重要问题
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • download使用浅析
  • Elasticsearch 参考指南(升级前重新索引)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Making An Indicator With Pure CSS
  • Median of Two Sorted Arrays
  • PHP那些事儿
  • React-flux杂记
  • SwizzleMethod 黑魔法
  • use Google search engine
  • 爱情 北京女病人
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 如何合理的规划jvm性能调优
  • 删除表内多余的重复数据
  • 通信类
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ###项目技术发展史
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (备忘)Java Map 遍历
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十一)手动添加用户和文件的特殊权限
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)人的集合论——移山之道
  • . Flume面试题
  • .gitignore
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 控制台应用程序读取配置文件app.config
  • .Net mvc总结
  • .NET 回调、接口回调、 委托
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET中两种OCR方式对比
  • ?