淺複制:被複制對象的所有變量都含有原來對象的相同值,而所有對其他對象的引用仍然指向原來的對象。換句話說就是,淺複制至複制他所考慮的對象(也就是基本資料類型),不複制他所引用的對象(其他對象)。
深複制:被複制對象的所有變量都含有與原來對象相同的值,那些引用其他對象的變量指向複制的新對象,而不再是原有的那些被引用的對象,換而言之,深複制吧複制的對象所引用的對象都複制了一遍。
深複制和淺複制都是由clone方法實作的。
Java中的所有類都繼承Object類,而Object類提供了一個clone()方法。這個方法的作用是傳回一個Object對象的複制。這個複制函數傳回的是一個新的對象而不是一個引用。
使用clone方法的步驟:
實作clone的類首先需要繼承Cloneable接口,Cloneable實際上是一個辨別接口,沒有任何實作方法。
在類中重寫Object的clone()方法。
在clone方法中調用super.clone()。無論clone的類繼承結構是什麼,super.clone()都會直接或者間接調用java.lang.Object類的clone()方法。
深複制:
Object o = super.clone(); //先執行淺複制
//對每一個對象的attr執行以下語句實作深複制
o.attr = this.getAttr().clone();