Java克隆学习记录
1、为什么要学习克隆?
在开发中,我们往往需要在一个对象发生改变前,记录其原始状态。这个时候,你可能会想到如:Object a = new Object(); Object b = a;的形式。但是这样随着a的变化,临时对象b也会发生变化,做不到我们想要的记录对象变化之前的状态。这个时候我们就需要clone方法了,或许你在此处你有会提出疑问:我们为什么不创建一个临时对象,然后把对象的属性逐一复制给临时变量呢?这样也可以满足我们的要求啊!确实这样的方式能满足要求,但是由于clone方法时native修饰的方法,表明其调用的是系统底层的方法,其效率更快。
2、克隆和引用复制的区别?
引用复制 eg:Object a = new Object(); Object b = a; 是两对象引用同一堆栈地址,其中一个对象修改了属性,其另一个对象的属性会同时变化,因为两对象实际存储是同一对象的堆栈引用地址。
克隆 Object a = new Object(); Object b= a.clone(); 两对象堆栈地址不一样,a == b 会返回false。