例子:
首先我們看看淺拷貝和深拷貝的定義
淺拷貝:隻複制一個對象,對象内部存在的指向其他對象數組或者引用則不複制
深拷貝:對象,對象内部的引用均複制
為了更好的了解它們的差別我們假設有一個對象A,它包含有2對象對象A1和對象A2
對象A進行淺拷貝後,得到對象B但是對象A1和A2并沒有被拷貝
對象A進行深拷貝,得到對象B的同時A1和A2連同它們的引用也被拷貝
在了解了深拷貝和淺拷貝後,我們來看看Java的深拷貝和淺拷貝實作。java.lang.Object的clone()方法預設是傳回一個淺拷貝對象。是以如果要用clone()方法實作一個深拷貝,我們必須對每個對象的clone()方法進行特别實作。當對象層次複雜的時候,這樣做不但困難而且浪費時間和容易出現錯誤,特别有時候你不但需要深拷貝同時你也對這個對象進行淺拷貝的時候,你會發現寫這個clone()方法真不是一個好的解決方案。
那麼除了clone()方法,我們還可以怎麼實作呢?答案是序列化,實作步驟和思路是把要拷貝的對象輸出成byte array,然後再利用ObjectInputStream轉換出新的對象。下面是代碼