下面列表是Java中深拷貝和淺拷貝的區(qū)別
| Shallow Copy | Deep Copy |
|---|---|
| Cloned Object and original object are not 100% disjoint. | Cloned Object and original object are 100% disjoint. |
| Any changes made to cloned object will be reflected in original object or vice versa. | Any changes made to cloned object will not be reflected in original object or vice versa. |
| Default version of clone method creates the shallow copy of an object. | To create the deep copy of an object, you have to override clone method. |
| Shallow copy is preferred if an object has only primitive fields. | Deep copy is preferred if an object has references to other objects as fields. |
| Shallow copy is fast and also less expensive. | Deep copy is slow and very expensive. |
表格來源:Difference Between Shallow Copy Vs Deep Copy In Java
| 淺拷貝 | 深拷貝 |
|---|---|
| 原對象和克隆對象并不是100%無關(guān)聯(lián) | 原對象和克隆對象100%無關(guān)聯(lián) |
| 對克隆對象的任何改變都會反映在原對象中,反之亦然 | 克隆對象的改變不會反映在原對象中,反之亦然 |
| 默認的clone()方法創(chuàng)建的是淺拷貝 | 要實現(xiàn)深拷貝,必須重寫clone()方法 |
| 如果一個對象中字段只有基本類型,推薦淺拷貝 | 如果一個對象中字段存在其他對象的引用類型,推薦深拷貝 |
| 淺拷貝速度快,代價小 | 深拷貝相對較慢,代價大 |
通過實例理解淺拷貝和深拷貝TODO