千鋒教育2023版Java面試寶典Java面試200題(含美團(tuán)、字節(jié)、阿里大廠真
2023-07-18 21:14 作者:hgypqghzbbww | 我要投稿

深拷貝(Deep Copy)和淺拷貝(Shallow Copy)是在計(jì)算機(jī)科學(xué)中用于描述對象復(fù)制的概念。
淺拷貝是指創(chuàng)建一個新對象,并將原始對象的字段值復(fù)制到新對象中。如果字段是值類型(如基本數(shù)據(jù)類型),則直接復(fù)制字段的值;如果字段是引用類型,則復(fù)制字段的引用,也就是兩個對象引用同一個內(nèi)存地址。因此,對其中一個對象的字段進(jìn)行修改,會影響到另一個對象。
深拷貝是指創(chuàng)建一個新對象,并將原始對象的字段值復(fù)制到新對象中。不同于淺拷貝,深拷貝會遞歸地復(fù)制引用類型字段所引用的對象,而不是共享引用。這意味著對其中一個對象的字段進(jìn)行修改,不會影響到另一個對象。
實(shí)現(xiàn)深拷貝的方式有多種:
1. 逐個復(fù)制對象的字段,如果字段是引用類型,則遞歸地對該字段進(jìn)行深拷貝。
2. 實(shí)現(xiàn) `Cloneable` 接口,并重寫 `clone()` 方法,在 `clone()` 方法中對引用類型的字段進(jìn)行深拷貝。
3. 使用序列化和反序列化,將對象寫入字節(jié)流,然后再從字節(jié)流中讀取出來,這樣會創(chuàng)建一個新的對象。
需要注意的是,如果對象中存在循環(huán)引用,即對象A引用了對象B,而對象B又引用了對象A,那么深拷貝可能會導(dǎo)致無限遞歸。因此,在進(jìn)行深拷貝時需要特別注意處理循環(huán)引用的情況。
標(biāo)簽: