(13)Java深浅拷贝

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

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

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

一、引用拷贝

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

二、浅拷贝

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

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

    如属性是基本类型(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深浅拷贝)