对象克隆
为什么要克隆?
克隆的对象可能有一些修改过的属性,而new出来的对象都只是初始值.
如果new出来后,一一对对象的属性赋值就会比较麻烦.这时就需要clone方法.
误区:
Stu s=new Stu;
Stu si=s;
这样的赋值只是对对象的引用地址进行复制,俩个对象指向同一个地址.
如何实现克隆
克隆有俩种方法; 深克隆;浅克隆
在java语言中,数据类型分为基本数据类型和引用数据类型.
基本数据类型可以直接复制它的值
而引用类型则只能复制它的引用地址.
所以深克隆和浅克隆的区别在于是否支持引用类型的成员变量的复制.
1.浅克隆
在浅克隆中,它只是复制它本身和其包含的成员变量,引用类型没有复制
在java语言中,通过覆盖Object类的clone()方法可以实现浅克隆.
2.深克隆
在深克隆中,除了他本身以外,所有包含他的成员变量都将被复制.可以复制引用类型.
可以通过clon方法和序列化等方式来实现.
序列化是将对象写入流中,在将其读出来.
**注意:**如果实现序列化,那么实现序列化的类必须实现Serializable接口,否则无法实现序列化.
解决多层克隆问题
如果引用类型中还包含其他的引用类型,这时就需要序列化来实现深克隆