java深拷贝和浅拷贝介绍

浅拷贝概念

 

 

深拷贝概念

@Data
@Slf4j
public class Sheep implements Cloneable {private String name;private int age;private String color;private Sheep friend;public Sheep(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}@Overrideprotected Object clone(){Sheep sheep = null;try {sheep = (Sheep) super.clone();} catch (Exception e) {log.info("" + e);}return sheep;}
}

@Data
public class DeepPrptoType implements Serializable, Cloneable {private static final long serialVersionUID = 1L;private String name;private DeepCloneableTarget deepCloneableTarget;public DeepPrptoType() {}//深拷贝方式1 使用clone方法@Overrideprotected Object clone() throws CloneNotSupportedException {Object deep = null;//这里对基本数据类型和String对克隆deep = super.clone();DeepPrptoType deepPrptoType = (DeepPrptoType) deep;deepPrptoType.deepCloneableTarget = (DeepCloneableTarget) deepCloneableTarget.clone();return deepPrptoType;}//深拷贝,方式2 通过对象的序列化实现(推荐使用)public static <T extends Serializable> T deepClone(T obj) {T cloneObj = null;try {//写入字节流ByteArrayOutputStream out = new ByteArrayOutputStream();ObjectOutputStream obs = new ObjectOutputStream(out);obs.writeObject(obj);obs.close();//分配内存,写入原始对象,生成新对象ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());ObjectInputStream ois = new ObjectInputStream(ios);//返回生成的新对象cloneObj = (T) ois.readObject();ois.close();} catch (Exception e) {e.printStackTrace();}return cloneObj;}
}

public class Client2 {public static void main(String[] args) throws CloneNotSupportedException {DeepPrptoType p = new DeepPrptoType();p.setName("深拷贝");p.setDeepCloneableTarget(new DeepCloneableTarget("大牛", "哈哈"));//方式一:深拷贝DeepPrptoType p2 = (DeepPrptoType) p.clone();System.out.println(p.getName() + p.getDeepCloneableTarget().hashCode());System.out.println(p2.getName() + p2.getDeepCloneableTarget().hashCode());//通过序列化和反序列化实现深拷贝,说明引用类型所指向的对象也被clone了DeepPrptoType p3 = DeepPrptoType.deepClone(p);System.out.println(p3.getName() + p3.getDeepCloneableTarget().hashCode());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用福禄克DSX系列测试仪部署MPTL模块化插头端接链路

在与客户合作时&#xff0c;认识到MPTL&#xff08;模块化插头端接链路&#xff09;比使用传统插座、面板和设备跳线更适合连接设备的地方非常重要。如果您要部署这种&#xff0c;福禄克网络指定经销商—明辰智航的工程师会在测试时介绍给您。 如果您与零售场所、教育场所和酒…

访问数据库_Lua 数据库访问

Lua 数据库访问本文主要为大家介绍 Lua 数据库的操作库&#xff1a;LuaSQL。他是开源的&#xff0c;支持的数据库有&#xff1a;ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。本文为大家介绍MySQL的数据库连接。LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装你需要的数…

cwntos新建目录挂载磁盘_详解Linux磁盘挂载、分区、扩容操作的实现方法

概述今天主要分享下关于Linux磁盘挂载、分区、扩容操作的实现方法&#xff0c;先介绍下基本概念1、磁盘在Linux系统中所有的设备都会以文件的形式存储。设备一般保存在/dev目录下面&#xff0c;以sda、sda1、sda2 …,sdb、sdb1…,hda,hdb。现在的设备一般都是sd命名&#xff0c…

【翻译】WF从入门到精通(第六章):加载和卸载实例

上一篇&#xff1a;【翻译】WF从入门到精通&#xff08;第五章&#xff09;&#xff1a;workflow跟踪学习完本章&#xff0c;你将掌握&#xff1a; 1.理解工作流实例为什么要卸载和重新加载及其时机 2.理解工作流实例为什么要持久化及其时机 3.搭建SQL Server 2005&am…

python人脸照片分类_Python OpenCV 人脸识别(一)

前面介绍了Numpy模块&#xff0c;下面再介绍一个OpenCV模块&#xff0c;就基于这两个库看一下当下很火的人工智能是如何实现的&#xff0c;我们介绍几个&#xff1a;人脸识别(当下非常火的)、音视频操作等等。今天先介绍一下静态图片的人脸识别&#xff0c;后面再介绍动态视频以…

万兆以太网测试仪应该具备什么功能

在以太网技术中&#xff0c;100BaseT是一个里程碑&#xff0c;确立了以太网技术在商业用途的统治地位。千兆以太网以及随后出现的万兆以太网标准是两个比较重要的标准&#xff0c;以太网技术通过这两个标准从商业用途的局域网技术延伸到校园网以及城域网的汇聚和骨干。 以太网…

利用photoshop制作gif图片

首先准备你需要的几张素材图片 1.将素材图片根据发生的顺序放置在不同的图层 2.打开窗口下的时间轴 选择帧动画 3.创建第一张帧动画 选项卡右边这个按钮&#xff0c;点击这个选择新建帧 第一张图片显示其他的隐藏 就是图层那儿左边的眼睛 4.创建第二章帧 新建帧--点击第二个图层…

光纤铜缆测试安装的基础知识你都了解了吗?

福禄克经销商—明辰智航走访了多名读者&#xff0c;发现他们都说自己精通测试系统设计、安装和测试&#xff0c;但是很多行业的新标准新要求却是很懵懂。所以&#xff0c;了解当前较新的性能参数&#xff0c;系统必须满足的各种标准和要求以支持新的应用&#xff0c;确保为客户…

不禁网页的浏览器_网页游戏兴衰史:「农场」没有菜,「渣渣辉」不贪玩

本文经授权转载自 | 国家人文历史ID |gjrwls作者 |巴里安200X年某月某日凌晨2点50&#xff0c;小明悄悄打开房门&#xff0c;蹑手蹑脚地走进存放笔记本电脑的房间&#xff0c;将拔下电源的电脑抱紧在怀里&#xff0c;悄悄地回了房间。一进房&#xff0c;小明兴奋地打开电脑&…

Java策略模式demo(打折策略例子)

策略模式&#xff1a;它定义了算法家族&#xff0c;分别封装起来&#xff0c;让它们之间可以相互替换。此模式让算法的改变&#xff0c;不会影响到使用算法的客户端。 它对一系列的算法进行封装&#xff0c;为所有的算法定义一个抽象的接口&#xff0c;并通过继承该抽象算法接…

java 多态判断非空_收藏Java 面试题全梳理

脚本之家你与百万开发者在一起来源 | Java建设者(ID&#xff1a;javajianshe)作者 |cxuan如若转载请联系原公众号Java 基础篇Java 有哪些特点并发性的&#xff1a;你可以在其中执行许多语句&#xff0c;而不必一次执行它面向对象的&#xff1a;基于类和面向对象的编程语言。独立…

福禄克官方经销商给您科普光纤极性基础

极性定义了流动的方向&#xff0c;例如磁场或电流的方向。在光纤中&#xff0c;极性是定向的&#xff1b;光信号通过光缆从一端传输到另一端。光缆一端的光纤链路传输信号&#xff08;Tx&#xff09;必须与另一端的相应接收器&#xff08;Rx&#xff09;匹配。那么&#xff0c;…

django Form组件

django Form组件 Django的Form主要具有一下几大功能&#xff1a; 生成HTML标签验证用户数据&#xff08;显示错误信息&#xff09;HTML Form提交保留上次提交数据初始化页面显示内容小试牛刀 1、创建Form类 from django.forms import Form from django.forms import widgets #…

RUP大讲堂(第三讲):如何建立软件产品的愿景

我撰写的一些关于RUP的讲义&#xff0c;PDF格式&#xff0c;可在文后点击“附件下载”阅读全文。本篇内容简介及部分截图&#xff1a;◇ 为什么需要愿景◇ 业务愿景◇ 系统愿景◇ 导出愿景的技巧◇ 小结

光纤测试时不得不用的福禄克CFP光纤测试仪

不同的光纤应用具有不同的最大插入损耗要求&#xff0c;以确保损耗不会过高&#xff0c;从而防止信号正确到达远端。因此&#xff0c;第一项任务涉及确定系统上线时客户计划运行的光纤应用程序&#xff0c;以及他们将来计划运行的光纤应用程序。 假设您的客户正在设计一个数据…

java怎么表示正无穷大_有什么比无穷大更大,比无穷小更小?

你好&#xff0c;欢迎来到我的《数学通识50讲》。我们讲无穷大是比任何数都大&#xff0c;那么世界上只有一个无穷大吗&#xff1f;如果有多个&#xff0c;能比较大小吗&#xff1f;类似的&#xff0c;无穷小就是无限接近于零&#xff0c;那么世界上会有不同的无穷小么&#xf…

越用越快的福禄克布线认证测试仪

对一些人来说&#xff0c;福禄克网络推出的布线认证测试仪系列仿佛就在昨天&#xff0c;特别是那些仍然坚持使用已经停产的福禄克DTX系列测试仪的用户。 但信不信由你&#xff0c;现在是包括DSX系列的测试仪在内的VersionV测试仪和光纤测试仪Pro和CFP光纤测试仪专业认证测试人员…