最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java Clone接口和深拷貝詳解

 更新時(shí)間:2021年08月24日 10:57:39   作者:eaglewgs  
今天小編就為大家分享一篇關(guān)于Java Clonable接口和深拷貝詳解上的深入了解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

對(duì)于數(shù)組的拷貝,如果是簡單類型的話是深拷貝,如果是引用類型的話是淺拷貝,但是因?yàn)閖ava是面向?qū)ο蟮?,在回答面試官問題的時(shí)候,我們可以不用說的這么細(xì),可以直接說淺拷貝。

代碼示例1

class Person implements Cloneable{//如果想克隆自定義類,那么需要在自定義類上實(shí)現(xiàn)Cloneable接口
    public int age;
    /*疑問:為什么這個(gè)接口是空接口呢?這是一個(gè)面試問題。
    空節(jié)課:也把它叫做標(biāo)記接口。其實(shí)就是這個(gè)意思:只要一個(gè)類實(shí)現(xiàn)了這個(gè)接口,那么就標(biāo)記這個(gè)類是可以進(jìn)行clone的
    *
    * 2:重寫clone方法*/
    @Override
    protected Object clone() throws CloneNotSupportedException {//重寫了父類的克隆方法
        return super.clone();
    }
}
public class TestDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person();
        Person person2 = (Person) person1.clone();
        System.out.println(person1.age);
        System.out.println(person2.age);
        System.out.println("=======修改=======");
        person2.age = 99;
        System.out.println(person1.age);
        System.out.println(person2.age);
    }
    /*public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        int[] array2 = array.clone();//對(duì)這個(gè)數(shù)組進(jìn)行克隆
        array2[0] = 33;//改變拷貝后的數(shù)組元素的值不會(huì)影響原來數(shù)組的元素,這種情況是深拷貝
        System.out.println(Arrays.toString(array2));
        System.out.println(Arrays.toString(array));
    }*/
}

輸出為:

在這里插入圖片描述

因?yàn)楦淖兊氖呛唵晤愋?,所以這種情況是深拷貝。

代碼示例2

class Money{
    double money = 12.5;
}
class Person implements Cloneable{//如果想克隆自定義類,那么需要在自定義類上實(shí)現(xiàn)Cloneable接口
    public int age;
    /*疑問:為什么這個(gè)接口是空接口呢?這是一個(gè)面試問題。
    空節(jié)課:也把它叫做標(biāo)記接口。其實(shí)就是這個(gè)意思:只要一個(gè)類實(shí)現(xiàn)了這個(gè)接口,那么就標(biāo)記這個(gè)類是可以進(jìn)行clone的
    *
    * 2:重寫clone方法*/
    Money m = new Money();
    @Override
    protected Object clone() throws CloneNotSupportedException {//重寫了父類的克隆方法
        return super.clone();
    }
}
public class TestDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person();
        Person person2 = (Person) person1.clone();
        System.out.println(person1.m.money);
        System.out.println(person2.m.money);
        System.out.println("=========修改==========");
        person2.m.money = 99.9;
        System.out.println(person1.m.money);
        System.out.println(person2.m.money);
    }
}

輸出為:

在這里插入圖片描述

可以參考以下圖分析:

在這里插入圖片描述

這種情況就是淺拷貝,那么可以將這個(gè)淺拷貝變成深拷貝嗎?只需要將Money也克隆一下

class Money implements Cloneable{//如果想要變成深拷貝的話,那么money也需要被克隆。
    double money = 12.5;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class Person implements Cloneable{//如果想克隆自定義類,那么需要在自定義類上實(shí)現(xiàn)Cloneable接口
    public int age;
    Money m = new Money();
    @Override
    protected Object clone() throws CloneNotSupportedException {//重寫了父類的克隆方法
        Person p = (Person)super.clone();//1:將當(dāng)前的對(duì)象克隆一份,克隆person
        p.m = (Money) this.m.clone();//2:克隆當(dāng)前的Money對(duì)象
        return p;
    }
}
public class TestDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person();
        Person person2 = (Person) person1.clone();
        System.out.println(person1.m.money);
        System.out.println(person2.m.money);
        System.out.println("=========修改==========");
        person2.m.money = 99.9;
        System.out.println(person1.m.money);
        System.out.println(person2.m.money);
    }
}

在這里插入圖片描述

這樣就就將淺拷貝轉(zhuǎn)變成了深拷貝,可以參考以下圖分析:

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • spring中時(shí)間格式化的兩種方法示例講解

    spring中時(shí)間格式化的兩種方法示例講解

    這篇文章主要介紹了spring中時(shí)間格式化的兩種方法,方法一自己格式化,方法二通過配置,結(jié)合實(shí)例代碼講解的非常詳細(xì),文中補(bǔ)充介紹了Spring項(xiàng)目中時(shí)間格式化的方法,需要的朋友可以參考下
    2023-08-08
  • Mybatis?Interceptor線程安全引發(fā)的bug問題

    Mybatis?Interceptor線程安全引發(fā)的bug問題

    這篇文章主要介紹了Mybatis?Interceptor線程安全引發(fā)的bug問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • SpringBoot基于Mybatis-Plus自動(dòng)代碼生成

    SpringBoot基于Mybatis-Plus自動(dòng)代碼生成

    這篇文章主要介紹了SpringBoot基于Mybatis-Plus自動(dòng)代碼生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 關(guān)于Https協(xié)議和HttpClient的實(shí)現(xiàn)詳解

    關(guān)于Https協(xié)議和HttpClient的實(shí)現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于Https協(xié)議和HttpClient實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 使用feign客戶端傳參接收不到的問題及解決

    使用feign客戶端傳參接收不到的問題及解決

    這篇文章主要介紹了使用feign客戶端傳參接收不到的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-03-03
  • IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    這篇文章主要介紹了IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié),非常不錯(cuò),具有參考價(jià)值,需要的朋友可以參考下
    2018-02-02
  • web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)方法示例

    web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于web中拖拽排序和java后臺(tái)交互實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • SpringBoot掃描不到Controller的解決方案

    SpringBoot掃描不到Controller的解決方案

    這篇文章主要介紹了SpringBoot掃描不到Controller的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • nacos配置中心遠(yuǎn)程調(diào)用讀取不到配置文件的解決

    nacos配置中心遠(yuǎn)程調(diào)用讀取不到配置文件的解決

    這篇文章主要介紹了nacos配置中心遠(yuǎn)程調(diào)用讀取不到配置文件的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • MyBatis工廠類封裝與簡化實(shí)現(xiàn)

    MyBatis工廠類封裝與簡化實(shí)現(xiàn)

    工廠類的目的是將對(duì)象的創(chuàng)建邏輯封裝在一個(gè)類中,以便客戶端代碼無需了解具體的實(shí)現(xiàn)細(xì)節(jié),本文主要介紹了MyBatis工廠類封裝與簡化實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

木兰县| 马关县| 安仁县| 惠水县| 利津县| 青岛市| 抚宁县| 澎湖县| 沿河| 贡嘎县| 随州市| 定安县| 和龙市| 南城县| 库伦旗| 子洲县| 田东县| 朝阳市| 合阳县| 凤台县| 温泉县| 开远市| 邯郸县| 新泰市| 金沙县| 秀山| 山东省| 托克逊县| 荥经县| 丰宁| 平定县| 茶陵县| 聂拉木县| 图片| 孙吴县| 鹤壁市| 湘乡市| 鹿邑县| 太康县| 镇平县| 太和县|