深入理解java clone
java类型分为两大类 基本类型如int byte等基本类型和引用类型string object等
clone的应用场景:如果一个对象内部有可变实例的话 那么对于调用方法不应该直接返回对象 防止CODE改变其内部结构 应该返回对象的clone
对于应用类型 默认实现super.clone只能帮我们实现浅复制 但在考虑clone时 基本类型和不可分割的应用类型 在实现默认clone时都是独立的复制一个新的对象 不会影响
原类型 即深复制
实现clone三部曲
1.实现cloneable接口
2.调用super.clone拿到一个对象
3.把浅复制的引用指向新的克隆体
public class Clone{ public static void main(String[] a) throws CloneNotSupportedException { CloneTest test=new CloneTest(); test.employ.name="jack"; System.out.println(test.employ.name); CloneTest clonetest=(CloneTest)test.clone(); clonetest.employ.name="new"; System.out.println(test.employ.name); System.out.println(clonetest.employ.name); }}class Employ implements Cloneable{ String name = null; int age; Employ() { } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } }class CloneTest implements Cloneable{ Employ employ = new Employ(); int ages = 30; CloneTest() { } @Override public Object clone() throws CloneNotSupportedException { CloneTest temp=new CloneTest(); temp.employ=(Employ)temp.employ.clone(); return temp;//原先直接为return super.clone() 如此将Employ重新复制 实现深复制 }}