91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java淺拷貝如何使用

發布時間:2022-06-01 16:53:49 來源:億速云 閱讀:183 作者:iii 欄目:大數據

這篇文章主要介紹“java淺拷貝如何使用”,在日常操作中,相信很多人在java淺拷貝如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java淺拷貝如何使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.概念

淺拷貝會創建一個新對象,新對象和原對象本身沒有任何關系,新對象和原對象不等,但是新對象的屬性和老對象相同。具體可以看如下區別:

(1)如果屬性是基本類型(int,double,long,boolean等),拷貝的就是基本類型的值;

(2)如果屬性是引用類型,拷貝的就是內存地址(即復制引用但不復制引用的對象) ,因此如果其中一個對象改變了這個地址,就會影響到另一個對象。

2.原理

如果原型對象的成員變量是值類型,將復制一份給克隆對象,也就是說在堆中擁有獨立的空間;如果原型對象的成員變量是引用類型,則將引用對象的地址復制一份給克隆對象,也就是說原型對象和克隆對象的成員變量指向相同的內存地址。換句話說,在淺克隆中,當對象被復制時只復制它本身和其中包含的值類型的成員變量,而引用類型的成員對象并沒有復制。

3.使用實例

需要拷貝的類上實現Cloneable接口并重寫其clone()方法

class Father{
    String name;
    public Father(String name) {
        this.name=name;
    }
    @Override
    public String toString() {
        return "Father{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Son implements Cloneable {
    int age;
    String name;
    Father father;
    public Son(String name,int age) {
        this.age=age;
        this.name = name;
    }
    public Son(String name,int age, Father father) {
        this.age=age;
        this.name = name;
        this.father = father;
    }
    @Override
    public String toString() {
        return "Son{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", father=" + father +
                '}';
    }
    @Override
    protected Son clone() throws CloneNotSupportedException {
        return (Son) super.clone();
    }
}
public class test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Father f=new Father("bigFather");
        Son s1 = new Son("son1",13);
        s1.father=f;
        Son s2 = s1.clone();
        
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("s1==s2:"+(s1 == s2));//不相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//相等
        System.out.println();
 
        //但是他們的Father father 和String name的引用一樣
        s1.age=12;
        s1.father.name="smallFather";//s1.father引用未變
        s1.name="son222";//類似 s1.name=new String("son222") 引用發生變化
        System.out.println("s1.Father==s2.Father:"+(s1.father == s2.father));//相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//不相等
        System.out.println(s1);
        System.out.println(s2);
    }
}

到此,關于“java淺拷貝如何使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湾仔区| 宝兴县| 扎赉特旗| 通山县| 长乐市| 平度市| 寻乌县| 诏安县| 偏关县| 泽普县| 夏邑县| 溧阳市| 静宁县| 安远县| 台湾省| 五莲县| 陆良县| 胶州市| 宁晋县| 罗山县| 麻江县| 攀枝花市| 奇台县| 营口市| 来凤县| 开化县| 宁武县| 介休市| 花莲县| 广南县| 南陵县| 临城县| 成都市| 梅河口市| 通辽市| 永仁县| 财经| 靖西县| 同心县| 江安县| 襄垣县|