[TOC]
cloneable
clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类
实例的 clone() 方法。
1 | public class CloneExample { |
正确:
1 | public class CloneExample implements Cloneable { |
浅拷贝
对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
我们举个clone产生的浅拷贝的例子,我们定义一个对象中的对象,然后尝试拷贝:
1 | @Data |
1 | @Data |
上面的例子中,我们定义了CustUser和Address。
1 | public void testShallowCopy() throws CloneNotSupportedException { |
浅拷贝我们只调用了CustUser的clone方法。看下输出结果:
1 | CustUser(firstName=雷, lastName=李, address=Address(name=北京颐和园), cars=[奥迪, 路虎]) |
我们可以看到拷贝之后的Address变化会影响到被拷贝的对象。
上面的例子我们还要关注两个点:第一点String是不可变的。不管是拷贝还是赋值,String都是不可变的。
1 | public class Singleton implements Cloneable |
深拷贝
对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
用序列化进行深拷贝
1 | public class Person implements Serializable { |