什么深拷贝和浅拷贝?
要实现深拷贝和浅拷贝都要 实现( implements)接口Cloneable 并重写Clone方法
浅拷贝:可以快速的对 原有对象调用Clong方法() 进行克隆 产生 新对象,而新对象的和原有(被拷贝)对象只是值相同
对 任何一个对象的修改 都不会造成另一个对象的改变
深拷贝:被复制(原有)的对象中包含 子对象时 就要进行深拷贝,子对象同样要实现Cloneable接口 和重写Clone方法
而原有的对象则需要手动的将原有的对象复制,在进行子对象的复制,最后在设置原有对象的子对象的值
使用Cloneable接口实现深复制和重写Clone方法存在的弊端:当一个对象有深层次的子对象时,也就是说当子对象
中包含子对象,在这种情况下 这种方法的性能就会降低
深拷贝的另一种实现方式:序列化 和 反序列化
使用这种方法实现深复制时需要被拷贝的对象,和被拷贝的子对象都实现Serializable接口,子对象也需要有Serializable
因为在序列化的时候 是将一个对象进行复制之后在转换为字节流 反序列化就是将字节流转换为对象 原有对象不变
所以当有多层次的深复制时 只需要将原有对象进行序列化和反序列化就可以实现深拷贝
分为两大步:
1 序列化:
①:创建一个 字节数组输出流 ByteArrayOutputStream
②:创建一个对象输出流: ObjectOutputStream 传入“ 字节数组输出流对象”用于实现序列化
③:调用writeObject()方法 传入this关键字,将当前对象,写入字节数组输出流
2:反序列化:
①:创建字节数组输入流 ByteArrayInputStream,传入“序列化后的字节流”
②:创建对象输入流(用于反序列化)ObjectInputStream
③:使用 readObject()方法 将字节流读出 将字节流强制转换为一个新的对象
深拷贝和浅拷贝
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。