【Java】java的原生clone只是一個淺拷貝!

淺拷貝和深拷貝

這里會涉及到淺拷貝和深拷貝蛾派,我之前的文章(Java的傳值方式中)也有提到

image-20210528222945533

然而像基本類型的數(shù)據(jù)俄认,例如int、long這些洪乍,它們之間用==作比較都是true眯杏,因為它們在內(nèi)存中都是作為常量來存儲的。==是在比地址壳澳,而.equls可以在重寫之后比較對象數(shù)據(jù)的差別.

clone

這里寫一個clone方法的實例岂贩,首先是實現(xiàn)Object自帶的clone方法,用這個方法創(chuàng)建一個對象巷波,然后在這個clone上做一些修改萎津,解決淺拷貝的問題。

代碼

實現(xiàn)clone方法的類:PrototypeEntity

/**
 * Created on 2021/5/28.
 *
 * @author xuxiaobai
 */
public class PrototypeEntity implements Cloneable {
    private int a;
    private User b;

    public PrototypeEntity(){}

    public PrototypeEntity(int a,User b){
        this.a=a;
        this.b=b;
    }

/**
     * 實現(xiàn)Object自帶的clone方法
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public PrototypeEntity clone() throws CloneNotSupportedException {
        return (PrototypeEntity) super.clone();
    }

    /**
     * 解決淺拷貝的clone方法
     * @return
     * @throws CloneNotSupportedException
     */
    public PrototypeEntity clone1() throws CloneNotSupportedException {
        PrototypeEntity clone = (PrototypeEntity) super.clone();
        clone.b=new User(this.b.getName(),this.b.getAge());
        return clone;
    }

    /**
     * get褥紫、set方法省略
     */
}

測試類:PrototypeTest

/**
 * Created on 2021/5/28.
 *
 * @author xuxiaobai
 */
public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        PrototypeEntity p1=new PrototypeEntity(1,new User("xiaobai",18));
        //原始的clone方法
        PrototypeEntity clone1 = p1.clone();
        PrototypeEntity clone2= p1.clone1();
        System.out.println("----clone1----");
        System.out.println("a:"+ (p1.getA()==clone1.getA()));
        System.out.println("b:"+ (p1.getB()==clone1.getB()));

        System.out.println("----clone2----");
        System.out.println("a:"+ (p1.getA()==clone2.getA()));
        System.out.println("b:"+ (p1.getB()==clone2.getB()));
    }
      /**
     * 結(jié)果
     * ----clone1----
     * a:true
     * b:true
     * ----clone2----
     * a:true
     * b:false
     */
}
image

clone1的b和p1的b是相同的,這說明使用Object的clone方法的話瞪慧,b對象沒有克隆成功髓考,只是一個淺拷貝。

而clone2的b和p1的b是不同的弃酌,說明使用clone1方法的話氨菇,b對象克隆成功了,是另外一個新的對象妓湘。

總結(jié)

Object的clone方法是一個本地方法查蓉,我們是查看不了的,不過我們可以看出榜贴,clone方法不會去重新創(chuàng)建對象內(nèi)的成員屬性豌研,是直接把原來對象的成員屬性的地址復(fù)制過來,可以說Object的clone方法只是一個淺拷貝唬党,跟方法的傳輸傳遞一樣鹃共。想要實現(xiàn)深拷貝就得自己去實現(xiàn)和修改clone方法,好像可串行化也可以實現(xiàn)深拷貝驶拱,以后有機(jī)會我去試試霜浴。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蓝纲,隨后出現(xiàn)的幾起案子阴孟,更是在濱河造成了極大的恐慌晌纫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件永丝,死亡現(xiàn)場離奇詭異锹漱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)类溢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門凌蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闯冷,你說我怎么就攤上這事砂心。” “怎么了蛇耀?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵辩诞,是天一觀的道長。 經(jīng)常有香客問我纺涤,道長译暂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任撩炊,我火速辦了婚禮外永,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拧咳。我一直安慰自己伯顶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布骆膝。 她就那樣靜靜地躺著祭衩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阅签。 梳的紋絲不亂的頭發(fā)上掐暮,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音政钟,去河邊找鬼路克。 笑死,一個胖子當(dāng)著我的面吹牛养交,可吹牛的內(nèi)容都是我干的衷戈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼层坠,長吁一口氣:“原來是場噩夢啊……” “哼殖妇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起破花,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谦趣,失蹤者是張志新(化名)和其女友劉穎疲吸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前鹅,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡摘悴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舰绘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂喻。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捂寿,靈堂內(nèi)的尸體忽然破棺而出口四,到底是詐尸還是另有隱情,我是刑警寧澤秦陋,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布蔓彩,位于F島的核電站,受9級特大地震影響驳概,放射性物質(zhì)發(fā)生泄漏赤嚼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一顺又、第九天 我趴在偏房一處隱蔽的房頂上張望更卒。 院中可真熱鬧,春花似錦稚照、人聲如沸蹂空。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腌闯。三九已至绳瘟,卻和暖如春雕憔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糖声。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工斤彼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蘸泻。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓琉苇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悦施。 傳聞我的和親對象是個殘疾皇子并扇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

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