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

java的深拷贝和浅拷贝

总结:

深拷贝:无论是基本类型还是引用类型都会创建新的实例。

浅拷贝:对于基本类型就是复制其值,对于引用类型则是复制了指向这些数据类型的内存地址。

浅拷贝(Shallow Copy)

浅拷贝是指在创建新对象时,对于对象中的基本数据类型的成员变量会复制其值,而对于引用类型成员变量则只复制其引用,也就是说新旧对象共享同一个引用类型成员变量指向的对象。如果通过新对象修改了引用类型成员变量指向的对象,那么原对象也会受到影响。

Java中实现浅拷贝的一种常见方式是通过Object类的clone()方法。需要注意的是,clone()方法是受保护的,所以通常需要在类中重写此方法并声明为public,同时还需要实现Cloneable接口。但这种方式仅能实现浅拷贝。

深拷贝(Deep Copy)

深拷贝则是完全复制对象及其所有引用类型成员变量指向的对象,即不仅复制引用本身,还复制引用指向的对象。这意味着新对象和原对象以及各自的所有引用类型成员变量指向的对象都是相互独立的,修改其中一个对象不会影响另一个对象。

Java中实现深拷贝有几种常见方式:

  1. 序列化(Serialization)实现深拷贝最常用的方式之一是利用Java的序列化机制。对象实现Serializable接口后,可以通过序列化和反序列化过程完成深拷贝。这种方法会将对象及其所有引用类型成员变量指向的对象全部复制一份。

  2. 构造函数另一种实现深拷贝的方式是在类中定义一个构造函数,该构造函数接受同类型的一个对象作为参数,然后在构造函数中逐个复制成员变量,包括递归地复制引用类型成员变量指向的对象。

  3. 复制对象的属性对于简单对象,可以手动编写代码来复制对象的每个属性,包括递归复制引用类型成员变量指向的对象。

  4. 使用第三方库也可以使用像Apache Commons Lang库中的org.apache.commons.lang3.SerializationUtils类提供的copy(Object)方法来实现深拷贝。

总的来说,选择浅拷贝还是深拷贝取决于具体的应用场景和需求。浅拷贝适用于不需要完全独立副本的情况,而深拷贝则适用于需要完全独立副本,且对象内部可能包含其他复杂对象的情况。

http://www.lryc.cn/news/374885.html

相关文章:

  • AI产品经理,应掌握哪些技术?
  • 同三维T80004EHL-W-4K30 4K HDMI编码器,支持WEBRTC协议
  • Hi3861 OpenHarmony嵌入式应用入门--点灯
  • SaaS案例分享:成功构建销售渠道的实战经验
  • 密钥管理简介
  • 2024中国应急(消防)品牌巡展成都站成功召开!
  • ansible-Role角色批量按照node_export节点,并追加信息到Prometheus文件中
  • 求最小公倍数 、小球走过路程计算 题目
  • 【Android面试八股文】你能说一说为什么IO是耗时操作?
  • 怎样增强 CLike 游戏的社交功能,促进玩家之间的互动和交流?
  • 12_YouOnlyLookOnce(YOLOv3)新一代实时目标检测技术
  • 安装 Nuxt.js 的步骤和注意事项
  • 【perl】环境搭建
  • 【车载音视频AI电脑】全国产海事船载视频监控系统解决方案
  • Centos SFTP搭建
  • 【中学教资科目二】01教育基础
  • 设计模式-享元模式Flyweight(结构型)
  • 【刷题】LeetCode刷题汇总
  • 树莓派pico入坑笔记,快捷键键盘制作
  • 华为鲲鹏应用开发基础:鲲鹏处理器及关键硬件特性介绍(二)
  • Vue.js结合ASP.NET Core构建用户登录与权限验证系统
  • 【html】如何利用id选择器实现主题切换
  • 服务器添加TLS域名证书核子之PKCS编解码
  • 使用 Selenium 自动化获取 CSDN 博客资源列表
  • 智能制造全闪解决方案,八大痛点,一网打尽
  • Python学习从0开始——Kaggle深度学习002
  • 比利时海外媒体宣发,发稿促进媒体通稿发布新形势-大舍传媒
  • 摄影构图:人像摄影和风景摄影的一些建议
  • 安卓实现输入快递单号生成二维码,摄像头扫描快递单号生成的二维码,可以得到快递信息
  • Mysql特殊用法分享