请写一个深拷贝Java程序
时间: 2023-07-19 16:24:29 浏览: 53
以下是一个简单的Java程序,用于进行深拷贝:
```
import java.io.*;
class DeepCopy implements Serializable {
public int num;
public String name;
public DeepCopy(int num, String name) {
this.num = num;
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
DeepCopy original = new DeepCopy(1, "original");
DeepCopy copy = null;
try {
// 深拷贝
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(original);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
copy = (DeepCopy) ois.readObject();
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("原始对象:" + original.num + " " + original.name);
System.out.println("拷贝对象:" + copy.num + " " + copy.name);
// 修改拷贝对象
copy.num = 2;
copy.name = "copy";
System.out.println("修改拷贝对象后:");
System.out.println("原始对象:" + original.num + " " + original.name);
System.out.println("拷贝对象:" + copy.num + " " + copy.name);
}
}
```
在这个程序中,我们定义了一个 `DeepCopy` 类,包含两个属性 `num` 和 `name`。然后我们创建了一个原始对象 `original`,并将其深拷贝到一个新的对象 `copy` 中。
实现深拷贝的关键在于使用 Java 序列化和反序列化。我们使用 `ObjectOutputStream` 将原始对象写入一个 `ByteArrayOutputStream` 中,然后使用 `ByteArrayInputStream` 和 `ObjectInputStream` 读取这个流并创建一个新的对象。
最后,我们修改了拷贝对象的属性,并打印出原始对象和拷贝对象的值。可以看到,修改拷贝对象并不会影响原始对象。