引用拷贝:
也就是把引用的存储地址进行拷贝复制过去。
JVM内存底层逻辑是这样:
对象拷贝:
我们认为的对象拷贝就是所说到的浅拷贝与深拷贝。
1、实现cloneable接口。
因为如果不实现cloneable接口的话,object的native修饰的clone方法会报错。
2、拷贝实现:
此时,我们就会发现内存地址不相同。
JVM的底层内存逻辑:
而区分浅和深拷贝的关键就在于类的成员变量里面是否存在引用类型。
当数据里面有引用类型的时候:
1-1、浅拷贝:
按照上面的方式直接拷贝。此时成员变量里面的引用类型,不会重新生成对象,而是两个变量指向同一个内存地址!
JVM的底层内存逻辑:
假设,我操作了s1的数组里面的内容,对应的s2的数组内容也会发送变化。这就是浅拷贝。
1-2、深拷贝:
那要变成深拷贝,那么对应的也就是要让这种引用类型的成员变量进行clone(前提:这个引用类型的成员变量里面已经没有其他的引用类型!如果是自定义的引用类型,还需要进行cloneable接口实现!)
本来clone方法:
修改过后:
此时我修改s1的数组是,s2的数组数据不受影响。
JVM的底层内存逻辑: