引用拷贝,深拷贝与浅拷贝

引用拷贝:

也就是把引用的存储地址进行拷贝复制过去。 

JVM内存底层逻辑是这样:

对象拷贝:

我们认为的对象拷贝就是所说到的浅拷贝与深拷贝。

1、实现cloneable接口

因为如果不实现cloneable接口的话,object的native修饰的clone方法会报错。

 

2、拷贝实现:

 此时,我们就会发现内存地址不相同。

 JVM的底层内存逻辑:

 

而区分浅和深拷贝的关键就在于类的成员变量里面是否存在引用类型

当数据里面有引用类型的时候:

1-1、浅拷贝:

按照上面的方式直接拷贝。此时成员变量里面的引用类型,不会重新生成对象,而是两个变量指向同一个内存地址!

 JVM的底层内存逻辑:

假设,我操作了s1的数组里面的内容,对应的s2的数组内容也会发送变化。这就是浅拷贝。

1-2、深拷贝:

那要变成深拷贝,那么对应的也就是要让这种引用类型的成员变量进行clone(前提:这个引用类型的成员变量里面已经没有其他的引用类型!如果是自定义的引用类型,还需要进行cloneable接口实现!)

本来clone方法:

原来的clone方法。

 修改过后:

修改后的clone方法。

 此时我修改s1的数组是,s2的数组数据不受影响。

 JVM的底层内存逻辑:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值