说到克隆就不得不提到一种设计模式——原型模式。
????????原型模式大致意思就是:原型实例指定创建对象的种类,并且通过复制原型创建新的对象。因为Java中的数据类型分为值类型和基本数据类型,所以也就有了深克隆和浅克隆。
浅克隆:
?????????浅克隆中,如果源对象的成员变量是值类型,将复制一份给克隆对象;如果源对象的成员变量是引用类型,则将引用对象的地址复制一份给目标对象,也就是说源对象和目标对象的成员变量指向相同的内存地址。
????????换句话说,浅克隆只是创建了一个新的对象,新对象中的引用类型属性指向的还是源对象中相应的引用类型属性的地址。因此,如果改变其中一个对象的属性,那么另一个对象也将改变。
????????Arrays.copyOf()方法就是浅克隆。
?深克隆:
????????在深克隆中,无论源对象的成员变量是值类型还是引用类型,都将复制一份给目标对象,这就意味着,新的对象是完全独立于源对象的,如果在其中一个对象改变属性,另一个对象不会受影响。
????????简言之,深克隆,除了对象本身被复制外,对象所包含的所有成员变量也将复制。
? ? ? ? 手动“new”对象、JSON工具类实现深克隆