深拷贝和浅拷贝

什么深拷贝和浅拷贝?
要实现深拷贝和浅拷贝都要 实现( implements)接口Cloneable 并重写Clone方法
浅拷贝:可以快速的对 原有对象调用Clong方法() 进行克隆 产生 新对象,而新对象的和原有(被拷贝)对象只是值相同
对 任何一个对象的修改 都不会造成另一个对象的改变
深拷贝:被复制(原有)的对象中包含 子对象时 就要进行深拷贝,子对象同样要实现Cloneable接口 和重写Clone方法
而原有的对象则需要手动的将原有的对象复制,在进行子对象的复制,最后在设置原有对象的子对象的值
使用Cloneable接口实现深复制和重写Clone方法存在的弊端:当一个对象有深层次的子对象时,也就是说当子对象
中包含子对象,在这种情况下 这种方法的性能就会降低
深拷贝的另一种实现方式:序列化 和 反序列化
使用这种方法实现深复制时需要被拷贝的对象,和被拷贝的子对象都实现Serializable接口,子对象也需要有Serializable
因为在序列化的时候 是将一个对象进行复制之后在转换为字节流 反序列化就是将字节流转换为对象 原有对象不变
所以当有多层次的深复制时 只需要将原有对象进行序列化和反序列化就可以实现深拷贝
分为两大步:
1 序列化:
①:创建一个 字节数组输出流 ByteArrayOutputStream
②:创建一个对象输出流: ObjectOutputStream 传入“ 字节数组输出流对象”用于实现序列化
③:调用writeObject()方法 传入this关键字,将当前对象,写入字节数组输出流
2:反序列化:
①:创建字节数组输入流 ByteArrayInputStream,传入“序列化后的字节流”
②:创建对象输入流(用于反序列化)ObjectInputStream
③:使用 readObject()方法 将字节流读出 将字节流强制转换为一个新的对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录介绍 01.对象拷贝有哪些 02.理解浅拷贝2.1 什么是浅拷贝2.2 实现浅拷贝案例 03.理解深拷贝3.1...
    杨充211阅读 857评论 0 1
  • Java深拷贝和浅拷贝 对象拷贝有哪些 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同...
    程序员will阅读 358评论 0 0
  • 1.浅拷贝 1.1 浅拷贝解释   创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,...
    火山_6c7b阅读 456评论 0 1
  • 定义 浅拷贝 基本数据类型 拷贝数值 引用类型 拷贝对象引用 深拷贝 基本数据类型 拷贝数值 引用类型 拷贝引用所...
    寒_蝉阅读 1,537评论 2 0
  • 什么是深拷贝,什么是浅拷贝 说到深浅拷贝,就不得不提到另外一个知识点,那就是引用类型和基本类型以及堆和栈的区别。再...
    jeff_nz阅读 888评论 0 0