久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Java的深拷貝與淺拷貝怎么使用

164次閱讀
沒有評論

共計 1863 個字符,預計需要花費 5 分鐘才能閱讀完成。

在 Java 中,對象的拷貝分為淺拷貝和深拷貝兩種方式。
淺拷貝是指創建一個新的對象,然后將原對象的非靜態字段值復制到新對象中。新對象和原對象的引用類型字段將指向相同的對象??梢酝ㄟ^實現 Cloneable 接口并重寫 clone() 方法來實現淺拷貝。
深拷貝是指創建一個新的對象,然后將原對象的非靜態字段值復制到新對象中。新對象和原對象的引用類型字段也將被復制,即引用類型字段指向的對象也會被復制??梢酝ㄟ^實現 Serializable 接口,將對象序列化為字節流,然后再反序列化為新對象來實現深拷貝。
下面是兩種拷貝方式的示例代碼:

  1. 淺拷貝示例:
class Person implements Cloneable {
private String name;
private int age;
private Address address;
// 省略構造方法和 getter/setter
@Override
protected Object clone() throws CloneNotSupportedException {return super.clone();
}
}
class Address {
private String city;
private String street;
// 省略構造方法和 getter/setter
}
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Address address = new Address("Beijing", "Dongcheng");
Person person1 = new Person("Alice", 25, address);
Person person2 = (Person) person1.clone();
System.out.println(person1 == person2); // false
System.out.println(person1.getAddress() == person2.getAddress()); // true
}
}
  1. 深拷貝示例:
import java.io.*;
class Person implements Serializable {
private String name;
private int age;
private Address address;
// 省略構造方法和 getter/setter
public Person deepCopy() throws IOException, ClassNotFoundException {ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (Person) ois.readObject();}
}
class Address implements Serializable {
private String city;
private String street;
// 省略構造方法和 getter/setter
}
public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {Address address = new Address("Beijing", "Dongcheng");
Person person1 = new Person("Alice", 25, address);
Person person2 = person1.deepCopy();
System.out.println(person1 == person2); // false
System.out.println(person1.getAddress() == person2.getAddress()); // false
}
}

需要注意的是,深拷貝要求被拷貝的對象及其引用類型字段都必須實現 Serializable 接口。如果對象的某個引用類型字段沒有實現 Serializable 接口,那么拷貝將會失敗。

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-21發表,共計1863字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 新密市| 博白县| 娄烦县| 华亭县| 神农架林区| 财经| 上饶市| 邢台市| 志丹县| 万宁市| 怀安县| 千阳县| 陇西县| 怀集县| 依兰县| 岳普湖县| 忻城县| 牙克石市| 攀枝花市| 玉溪市| 土默特左旗| 博湖县| 来安县| 兴仁县| 无锡市| 鹤壁市| 紫云| 阿拉善右旗| 天门市| 合作市| 论坛| 巨野县| 红河县| 博乐市| 寿阳县| 承德市| 简阳市| 文昌市| 永定县| 天祝| 淳化县|