91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

java怎么實現對象克隆

小億
124
2023-08-18 01:17:39
欄目: 編程語言

在Java中,可以通過兩種方式來實現對象克隆:淺拷貝和深拷貝。

  1. 淺拷貝:使用Object類的clone()方法進行對象的淺拷貝。淺拷貝會創建一個新的對象,將原始對象的非靜態字段的值復制到新對象中,對于引用類型的字段,復制的是引用而不是對象本身。如果原始對象中的字段是可變的,修改新對象中的字段會影響原始對象,反之亦然。

例如:

public class MyClass implements Cloneable {
private int intValue;
private String stringValue;
public MyClass(int intValue, String stringValue) {
this.intValue = intValue;
this.stringValue = stringValue;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
MyClass obj1 = new MyClass(10, "Hello");
try {
MyClass obj2 = (MyClass) obj1.clone();
System.out.println(obj1 == obj2); // false
System.out.println(obj1.intValue == obj2.intValue); // true
System.out.println(obj1.stringValue == obj2.stringValue); // true
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
  1. 深拷貝:通過實現Serializable接口以及使用序列化和反序列化的方式實現對象的深拷貝。深拷貝會創建一個新的對象,將原始對象及其引用的對象都復制到新對象中,新對象與原始對象是完全獨立的。

例如:

import java.io.*;
public class MyClass implements Serializable {
private int intValue;
private String stringValue;
public MyClass(int intValue, String stringValue) {
this.intValue = intValue;
this.stringValue = stringValue;
}
public MyClass 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 (MyClass) ois.readObject();
}
public static void main(String[] args) {
MyClass obj1 = new MyClass(10, "Hello");
try {
MyClass obj2 = obj1.deepClone();
System.out.println(obj1 == obj2); // false
System.out.println(obj1.intValue == obj2.intValue); // true
System.out.println(obj1.stringValue == obj2.stringValue); // false
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}

需要注意的是,要實現深拷貝,對象及其引用的對象都需要實現Serializable接口。

0
紫阳县| 宜兴市| 海宁市| 攀枝花市| 汾西县| 兴城市| 新乐市| 黎城县| 哈密市| 和平县| 延寿县| 宜君县| 瑞昌市| 基隆市| 新邵县| 云和县| 金川县| 察隅县| 大安市| 冀州市| 将乐县| 神木县| 托克托县| 灵宝市| 固阳县| 依兰县| 安远县| 株洲市| 莱芜市| 石嘴山市| 山阴县| 芒康县| 华蓥市| 邛崃市| 临高县| 谢通门县| 罗平县| 九寨沟县| 璧山县| 七台河市| 宿州市|