天天看点

java深拷贝和浅拷贝的总结

java里的clone分为: 

   A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 

b:  深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。  

Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点 

1.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。 

2.在派生类的clone()方法中,调用super.clone()。 

3.在派生类中实现Cloneable接口。 

注明:Object类里的clone方法是浅复制(浅克隆)

一般java对象

普通复制

深复制

因为Object类里的clone方法是浅复制,所以当Book里面包含其他对象引用Person的时候,需要在对Book重写clone()方法的时候也调用Person的clone()方法。

List等集合的深复制

利用序列化来做深复制,把对象写到流里的过程是序列化(Serilization)过程,而把对象从流中读出来的过程则叫做反序列化(Deserialization)过程。应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。,利用这个特性,可以做深拷贝 。