天天看點

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裡面。,利用這個特性,可以做深拷貝 。