Java中,對象復制分為深度拷貝和淺度拷貝。他們的區別在于拷貝后的對象是否引用了原對象的數據。
淺度拷貝就是簡單的復制。淺度拷貝得到的拷貝對象和原對象共享相同的成員數據。如果對拷貝對象進行修改,原對象相應的成員數據也會改變。在Java中,可以通過clone()方法進行淺度拷貝,使用方法如下:
public class Student implements Cloneable{ private String name; private int age; public Object clone() throws CloneNotSupportedException{ return super.clone(); } }
而深度拷貝則是創建一個新對象,與原對象無關。我們需要重新申請空間,將原對象的所有屬性拷貝到新對象中,這樣就可以保證拷貝后的對象和原對象沒有任何關聯了。下面是一個使用深度拷貝的例子:
public class Student implements Serializable { private String name; private int age; public Student deepClone() throws IOException, ClassNotFoundException { // 將對象寫入流中 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); // 從流中讀出對象 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (Student) ois.readObject(); } }
當然,深度拷貝可能會耗費大量的時間和內存,所以應該根據具體情況來選擇淺度拷貝或深度拷貝。