亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

原型模式在Java實現深拷貝與淺拷貝的區別

發布時間:2024-09-29 12:20:29 來源:億速云 閱讀:86 作者:小樊 欄目:編程語言

原型模式(Prototype Pattern)是一種創建型設計模式,它允許通過復制(或克隆)一個現有對象來創建一個新對象,而無需重新實例化它。這種模式在Java中可以通過實現Cloneable接口和重寫clone()方法來實現深拷貝(Deep Copy)和淺拷貝(Shallow Copy)。

  1. 淺拷貝(Shallow Copy)

    • 淺拷貝創建一個新對象,這個新對象有著原始對象值的一份精確拷貝。如果拷貝的是基本數據類型,則直接拷貝其值;如果拷貝的是引用類型,則拷貝的是引用,即新對象和原始對象的引用指向的是同一個內存地址。
    • 在Java中,可以通過實現Cloneable接口并重寫clone()方法來實現淺拷貝。但需要注意的是,clone()方法默認執行的是淺拷貝,需要開發者手動實現深拷貝邏輯。
    • 例如:
public class ShallowCopyExample implements Cloneable {
    private int[] data;

    public ShallowCopyExample(int[] data) {
        this.data = data;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

在這個例子中,ShallowCopyExample類實現了Cloneable接口并重寫了clone()方法。但是,由于data字段是一個數組,它仍然指向同一個內存地址,因此執行的是淺拷貝。 2. 深拷貝(Deep Copy)

* 深拷貝創建一個新對象,并遞歸地拷貝原始對象中的所有引用類型字段。這意味著新對象和原始對象的引用類型字段將指向不同的內存地址。
* 在Java中,實現深拷貝通常需要自定義拷貝邏輯,而不是簡單地重寫`clone()`方法。可以通過序列化和反序列化的方式來實現深拷貝,因為序列化會創建對象的深度副本。
* 例如:
public class DeepCopyExample implements Serializable {
    private int[] data;

    public DeepCopyExample(int[] data) {
        this.data = data;
    }

    public DeepCopyExample deepCopy() {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            return (DeepCopyExample) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException("Deep copy failed", e);
        }
    }
}

在這個例子中,DeepCopyExample類實現了Serializable接口,并重寫了一個deepCopy()方法。這個方法使用序列化和反序列化的技術來創建對象的深度副本。

總結:

  • 淺拷貝只復制對象本身和其中基本數據類型的值,而引用類型的字段仍然指向同一個內存地址。
  • 深拷貝遞歸地復制對象本身和其中所有引用類型字段的值,使得新對象和原始對象的引用類型字段指向不同的內存地址。
  • 在Java中,可以通過實現Cloneable接口并重寫clone()方法來實現淺拷貝;通過序列化和反序列化的方式來實現深拷貝。
向AI問一下細節

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

AI

弥渡县| 葵青区| 锡林浩特市| 南溪县| 磐安县| 山阳县| 全椒县| 扶沟县| 青岛市| 雅江县| 永寿县| 当雄县| 枣庄市| 红原县| 临西县| 桦川县| 麦盖提县| 博爱县| 内江市| 揭阳市| 会宁县| 呈贡县| 河东区| 黑龙江省| 商城县| 古蔺县| 禄丰县| 湟中县| 日土县| 石屏县| 霍城县| 长子县| 榆林市| 新化县| 于都县| 大同县| 文水县| 台湾省| 商城县| 凤翔县| 宣化县|