1. 程式人生 > >java淺拷貝和深拷貝的區別

java淺拷貝和深拷貝的區別

淺拷貝是指:只複製一個物件,物件內部存在的指向其他物件陣列或者引用則不復制。

深拷貝是指:不僅複製當前的物件,如果物件中還存在引用,則將引用的物件一起復制。

java中使用到的clone方法是淺拷貝,下面是簡單演示:

首先定義一個簡單類A,申明一個屬性aa = 1;

public class A {     int aa = 1; } 定義一個可克隆類C,在C類中申明瞭類A、一個int屬性b值為1;

public class C implements Cloneable{     A a = new A();     int b = 1;     public Object clone(){         Object c = null;         try {             c = super.clone();         } catch (CloneNotSupportedException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         return c;     } }

在測試類中,建立一個c類的物件,申明c1為c的克隆物件,在克隆後再次將c類中b屬性的值賦為10,A類中aa屬性賦值為10;

public class Test {     public static void main(String[] args) {         C c = new C();         C c1 = (C)c.clone();         c.a.aa = 10;         c.b = 10;         System.out.println(c.a.aa);         System.out.println(c1.b);     }

}

輸出的值依次為10和1;

可見C類中的A類並沒有被拷貝過來而只是獲得了引用。

通過序列化方式實現深拷貝:先將要拷貝物件寫入到記憶體中的位元組流中,然後再從這個位元組流中讀出剛剛儲存的資訊,作為一個新物件返回,那麼這個新物件和原物件就不存在任何地址上的共享,自然實現了深拷貝。