Java對象的深層復(fù)制是指Java對象A本身被clone成新對象B,同時A的屬性也是被clone成新對象,賦值到A的各個屬性上去,A與B的相同屬性都引用到不同的對象;
Java對象的淺層復(fù)制是指Java對象A本身被clone成新對象B,但A的屬性沒有被clone處理,只是把A的各個屬性所指的對象賦值到B對應(yīng)的屬性上,A與B的相同屬性都引用到同一個對象。
在java中,默認(rèn)是淺層復(fù)制的,如果要復(fù)制的對象中只含有基本數(shù)據(jù)類型和String類型,
那么淺層復(fù)制和淺層復(fù)制是沒有區(qū)別的,所以你可以放心的使用默認(rèn)的淺層復(fù)制,
如果屬性有Date或其他自定的數(shù)據(jù)類,則一定的小心了,因為這時淺層復(fù)制后對象B的屬性birthday與原始對象A的對應(yīng)屬性birthday,都是引用到同一個對象TestVo ,
如果通過B.birthday的方法改了TestVo的值,則修改會影響到A.birthday,這時也就會發(fā)生互串的情況
以下三種方法可以實現(xiàn)淺層復(fù)制:
(1)通過調(diào)用對象set方法來實現(xiàn),屬性個數(shù)比較少時適用
TestVo .name = setAge(.age = .birthday == = (TestVo)