美文网首页
(13)Java深浅拷贝

(13)Java深浅拷贝

作者: hedgehog1112 | 来源:发表于2020-12-11 22:30 被阅读0次

    引用拷贝(一个人,不同名字)

    浅拷贝(双胞胎):创建对象,将目标对象内容复制过来,不直接拷贝引用

    深拷贝:全独立原对象,拷贝数据类型时,创建新对象,复制成员变量

    一、引用拷贝

    生成新对象引用地址,最终指向同一对象。不同场合、叫法不同,但我们很清楚哪些名称"我"

    二、浅拷贝

    创建对象,将目标对象内容复制过来,不直接拷贝引用

    创建新对象,和原对象不等,但属性相同。区别:

        如属性是基本类型(int,double,long,boolean),拷贝基本类型

        如果属性是引用类型,拷贝的就是内存地址(即复制引用复制引用的对象) ,如对象改变地址影响另一对象

    浅拷贝实现

    类上实现Cloneable接口重写clone()

    双胞胎一样,两个人,样貌、各种关系(父母亲人)都相同的。name初始==相等,s1.name="son222" 改变引用指向

    三、深拷贝(重写clone   序列化)

    全独立原对象。深拷贝:拷贝数据类型时,创建新对象,复制成员变量

    实现深拷贝提供,重写clone()方法和序列法。

    1、重写clone()

    自定义引用变量类去实现Cloneable接口实现clone()。字符类创建新字符串实现拷贝

    Father实现Cloneable接口并重写clone()。son的clone()对各个引用都拷贝一遍

    2、序列化

    如果引用数量或层数太多,怎么办呢?

    序列化后:将二进制字节流内容媒介(文本或字节数组),拷贝给clone对象,从媒介读,原对象修改不影响clone对象(从媒介读)

        序列化:Java对象缓存Redis中(字节流或json串),对象属性,不存对象内存地址

        反序列化:从Redis中读取生成Java对象,重新创建所有引用对象

    自定义类实现Serializable接口。深拷贝类(Son)定义函数,返回该类对象

    https://mp.weixin.qq.com/s/kmD6FKJ5fwLUr64DonZf-A

    相关文章

      网友评论

          本文标题:(13)Java深浅拷贝

          本文链接:https://www.haomeiwen.com/subject/ribsgktx.html