色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java淺拷貝和深拷貝的方法

張吉惟1年前6瀏覽0評論

Java中的對象賦值常常被稱為拷貝,但是實際上對象的拷貝分為淺拷貝和深拷貝兩種。淺拷貝僅僅是復制了對象的 棧 空間,而深拷貝則會復制對象的 所有 空間。

以下是Java中實現淺拷貝和深拷貝的方法。

public class Person implements Cloneable {
private String name;
private int age;
private Listhobbies = new ArrayList<>();
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
//實現淺拷貝
public Person shallowCopy() throws CloneNotSupportedException {
return (Person) this.clone();
}
//實現深拷貝
public Person deepCopy() 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 (Person) ois.readObject();
}
//省略了getters和setters,以及構造方法
}

上述代碼中,我們定義了一個Person類,并重寫了java.lang.Object的clone方法。在Person類中,我們實現了shallowCopy和deepCopy方法,用于淺拷貝和深拷貝。

shallowCopy方法實現很簡單,它直接調用Object對象原生的clone方法。
deepCopy方法的實現則需要通過將對象序列化和反序列化來實現深拷貝。

深拷貝會將對象的所有引用類型的子對象進行深拷貝,以保證完全獨立和獨立的可變狀態。然而,在使用深拷貝的時候要注意,子對象必須全部是可序列化的,否則會拋出異常。

總之,淺拷貝和深拷貝都有各自的特點,需要根據實際需求進行選擇。