深入淺出深度復(fù)制與淺度復(fù)制(demo)

深度復(fù)制:復(fù)制一個對象時并且復(fù)制了該對象的引用(引用的引用扔涧。囤踩。珍特。)祝峻。

淺度復(fù)制:僅僅復(fù)制該對象的成員變量(基本類型、基本類型的包裝類型以及類實例)的值扎筒,對引用以及引用對象并沒有復(fù)制莱找,還是指向同一塊內(nèi)存。

java里沒有真正意義上的深度復(fù)制嗜桌,當(dāng)你復(fù)制一個對象時奥溺,該對象的引用與被復(fù)制對象的引用指向的是同一塊內(nèi)存地址,如果修改引用對象的成員變量骨宠,那么被復(fù)制對象的引用對象的成員變量也會被修改浮定,這個時候,這倆個對象的引用變量指向的是同一塊內(nèi)存地址层亿。這倆個引用對象用 == 比較返回true桦卒。但是當(dāng)修改對象的成員變量時,會開辟新的內(nèi)存匿又。對于引用對象來說方灾,只有將引用對象(指修改這個引用對象整體,而不是修改某一個成員變量)指向一個新的該引用對象實例時碌更,會開辟新的空間裕偿,或者將其中一個引用對象(比如原對象的引用對象)置為null,但是復(fù)制的對象的引用對象不會改變痛单。

要實現(xiàn)深度復(fù)制泉蝌,那么原對象需要重寫clone()方法逊朽,引用對象也需要重寫clone()方法鳍徽,如果引用對象還包含引用霹期,那么引用的引用也需要重寫clone()谆棱。還有一種是序列化對象,再轉(zhuǎn)回該對象時也實現(xiàn)了深度復(fù)制圆仔。

深度復(fù)制和淺度復(fù)制只是一種概念垃瞧,看業(yè)務(wù)場景需要使用。

包含深度復(fù)制和淺度復(fù)制的demo:

public class DeepCopyi mplements Cloneable{

private Integer age;

private String name;

DeepCopyEntity deepCopyEntity;

DeepCopy(DeepCopyEntity deepCopyEntity,Integer age,String name){

this.deepCopyEntity= deepCopyEntity;

this.age= age;

this.name= name;

}

DeepCopy(DeepCopy deepCopy){

this.age= deepCopy.age;

this.name= deepCopy.name;

this.deepCopyEntity= deepCopy.deepCopyEntity;

}

protected DeepCopyclone() throws CloneNotSupportedException {

DeepCopy deepCopy = (DeepCopy)super.clone();

deepCopy.deepCopyEntity = deepCopyEntity.clone();//要實現(xiàn)深度克隆坪郭,那么引用的對象也要實現(xiàn)Cloneable接口个从,進行深度復(fù)制

return deepCopy;

}

public static void main(String[] args) throws CloneNotSupportedException {

DeepCopy deepCopy =newDeepCopy(newDeepCopyEntity(1222,"jack"),2222,"james");

DeepCopy deepCopy1 = deepCopy.clone();//深度拷貝

//

DeepCopy deepCopy2 =newDeepCopy(deepCopy);//淺拷貝

//

//

System.out.println(deepCopy.name== deepCopy1.name);

System.out.println(deepCopy.age== deepCopy1.age);

System.out.println();

System.out.println(deepCopy.name== deepCopy2.name);

System.out.println(deepCopy.age== deepCopy2.age);

System.out.println();

//? ? ? ? deepCopy2.deepCopyEntity = null;

//如果是修改成員對象的某一個成員變量,那么對于淺度復(fù)制來說歪沃,被復(fù)制的成員對象的該成員變量也會被修改嗦锐,還是指向同一塊內(nèi)存

deepCopy2.deepCopyEntity.setName("111");

//如果是修該成員變量,那么就會開辟一塊新的內(nèi)存

deepCopy2.deepCopyEntity= deepCopy1.deepCopyEntity;

System.out.println(deepCopy.deepCopyEntity== deepCopy1.deepCopyEntity);//深

System.out.println(deepCopy.deepCopyEntity== deepCopy2.deepCopyEntity);//淺

}

}

成員對象類:

packagecom.test.demo.TestCopy;

/**

* Created by hasee on 2017/8/18.

*/

public class DeepCopyEntity implements Cloneable{

private intage;

privateStringname;

DeepCopyEntity(intage,String name){

this.age= age;

this.name= name;

}

protected DeepCopyEntity clone() throws CloneNotSupportedException {

return(DeepCopyEntity)super.clone();

}

public intgetAge() {

returnage;

}

publicStringgetName() {

returnname;

}

public voidsetName(String name) {

this.name= name;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沪曙,一起剝皮案震驚了整個濱河市奕污,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌液走,老刑警劉巖碳默,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缘眶,居然都是意外死亡嘱根,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門巷懈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來该抒,“玉大人,你說我怎么就攤上這事顶燕〈毡#” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵割岛,是天一觀的道長。 經(jīng)常有香客問我犯助,道長癣漆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任剂买,我火速辦了婚禮惠爽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞬哼。我一直安慰自己婚肆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布坐慰。 她就那樣靜靜地躺著较性,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赞咙,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天责循,我揣著相機與錄音,去河邊找鬼攀操。 笑死院仿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的速和。 我是一名探鬼主播歹垫,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颠放!你這毒婦竟也來了排惨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤慈迈,失蹤者是張志新(化名)和其女友劉穎若贮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痒留,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谴麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伸头。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾效。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恤磷,靈堂內(nèi)的尸體忽然破棺而出面哼,到底是詐尸還是另有隱情,我是刑警寧澤扫步,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布魔策,位于F島的核電站,受9級特大地震影響河胎,放射性物質(zhì)發(fā)生泄漏闯袒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一游岳、第九天 我趴在偏房一處隱蔽的房頂上張望政敢。 院中可真熱鬧,春花似錦胚迫、人聲如沸喷户。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褪尝。三九已至闹获,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恼五,已是汗流浹背昌罩。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灾馒,地道東北人茎用。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像睬罗,于是被迫代替她去往敵國和親轨功。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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