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

【JAVA] 杂谈: java中的拷贝(克隆方法)

这篇文章我们来介绍什么是拷贝,并且实现浅拷贝到深拷贝。

目录

一、浅拷贝

1.1 clone 方法

1.2 实现浅拷贝:

1.2.1 重写 clone方法

1.2.2 实现接口 Cloneable

1.2.3 调用克隆方法

1.2.4 原理图:​

1.3 浅拷贝的不足

1.3.1 增加引用类型

1.3.2 再次克隆

1.3.3 浅拷贝的不足原理图:

二、深拷贝

2.1 实现深拷贝


一、浅拷贝

浅拷贝是指创建一个新的对象,当被拷贝的引用中 含有引用类型参数时,改变该参数,两个引用的值都会改变。

1.1 clone 方法

我们在Object类中见到了有clone方法

clone 方法是Object类中的一个方法,用于创建并返回当前对象的一个副本。副本是一个全新的对象,但是它包含了原始对象所有的字段和值。


1.2 实现浅拷贝:

1.2.1 重写 clone方法

我们先看看 Object  类中 clone 的源码

仿照源码,我们来重写clone方法


1.2.2 实现接口 Cloneable

我们看看这个接口的源码,我们发现这个接口是空的

我们叫这种接口为空接口,也叫标记接口,这里这个接口表明当前类可以被克隆


1.2.3 调用克隆方法


1.2.4 原理图:


1.3 浅拷贝的不足

我们上面介绍浅拷贝时说了,它的缺点,在被克隆的引用中有引用类型时,改变引用类型,两个引用的值都会改变,我们来看看是不是

1.3.1 增加引用类型

1.3.2 再次克隆

并且改变其中一个money的值看看


结果和我们预想的一致,Money对象没有被克隆。

1.3.3 浅拷贝的不足原理图:



二、深拷贝

2.1 实现深拷贝

为了避免浅拷贝的缺点,我们进行深拷贝,去优化clone方法


1.先把引用类型的类改成克隆的形式,并且重写clone方法


2.优化clone方法,首先调用父类的clone()方法来克隆Person对象,然后将Person对象中的Money对象也克隆一份,并将其赋给克隆后的Person对象的m变量。然后返回这个克隆后的Person对象

这样就完成了深拷贝


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

相关文章:

  • 使用 PDF API 合并 PDF 文件
  • 关于BeanUtils.copyProperties是否能正常复制字段【详细版】
  • 爬虫框架快速入门——Scrapy
  • 鸿蒙开发-HMS Kit能力集(应用内支付、推送服务)
  • TYUT设计模式大题
  • Webman中实现定时任务
  • 《以 C++破局:人工智能系统可解释性的探索与实现》
  • C++:QTableWidget删除选中行(单行,多行即可)
  • C++类中多线程的编码方式
  • 数据湖的概念(包含数据中台、数据湖、数据仓库、数据集市的区别)--了解数据湖,这一篇就够了
  • EDKII之安全启动详细介绍
  • 原生js上传图片
  • 使用torch==2.5.1版本用的清华源遇到的坑
  • 泷羽Sec-星河飞雪-BurpSuite之解码、日志、对比模块基础使用
  • 对拍详细使用方法
  • Python面向对象编程与模块化设计练习
  • Linux系统硬件老化测试脚本:自动化负载与监控
  • 搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档
  • 排序学习整理(1)
  • 《深入探究 Java 中的 boolean 类型》
  • 智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器
  • 接口测试工具:reqable
  • 同时多平台git配置:GitHub和Gitee生成不同的SSH Key
  • 刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】
  • 从“找三角形”讲“等腰三角形”
  • Java中的泛型方法和泛型类
  • springboot学习-spring-boot-data-jdbc分页/排序/多表查询的例子
  • 通信与网络基础
  • 【3.存储系统】综合大题
  • 【Linux】【字符设备驱动】深入解析