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