Java小技巧--clone()的妙用

1:為什么要使用clone()

如果你在一個函數(shù)內(nèi)需要把一個對象copy出來一份,并且在新copy出來的對象進行操作,不能影響源對象

這個時候你應(yīng)該怎么做?

首先這樣做是不對的

Person p1 =newPerson();

p1.setName("dog");

p1.setAge(10);

Person p2 = p1;

這個時候如果你把p2的name重新set一遍,那么p1.getName()將會得到p2.setName()的值。

因為你只是把p1的引用給了p2,在內(nèi)存地址上,p2和p1指向的是同一個對象,如果想要p2既有p1對象的所有內(nèi)容,又可以隨便修改不影響p1,該怎么辦呢?

1:笨方法

把p1所有的屬性拿出來,new 一個p2,重新set到p2的屬性內(nèi),這樣因為使用了new 會重新創(chuàng)建一個對象。

2:使用Java clone()方法


2:clone在Java內(nèi)的區(qū)別

在Java內(nèi)clone分為兩種,一種是淺克隆,一種是深克隆

那么什么叫淺克???

淺克隆指的是只克隆對象內(nèi)的基本屬性,比如int long double 還有String

String也是一個對象但是Java處理的比較特殊。

淺克隆不會克隆對象內(nèi)的對象,只會克隆此對象的引用,什么意思呢,看代碼~



那么什么叫深克???

深克隆就是對對象的完克隆,包括基本類型屬性和對象類型屬性


3:如何實現(xiàn)兩種克隆

如何實現(xiàn)淺克隆?

首先要實現(xiàn)Cloneable接口,并且要覆蓋object的clone方法,(object的克隆方法是protected)


如何實現(xiàn)深克隆?

1:首先引用對象內(nèi)必須實現(xiàn)淺克隆

2:必須在要實現(xiàn)深克隆的對象內(nèi),把引用對象設(shè)置為引用對象的clone方法返回的對象,代碼如下


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容