// 深拷贝示例代码:使用序列化实现深拷贝
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 使用序列化实现深拷贝
public Person deepCopy() throws IOException, ClassNotFoundException {
// 序列化对象到字节数组输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(this);
// 反序列化对象从字节数组输入流
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
return (Person) in.readObject();
}
}
public class DeepCopyExample {
public static void main(String[] args) {
try {
Person original = new Person("John", 30);
Person copied = original.deepCopy();
// 修改原始对象的属性
original.name = "Jane";
System.out.println("Original: " + original.name + ", " + original.age);
System.out.println("Copied: " + copied.name + ", " + copied.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Person
类实现了 Serializable
接口,这是为了支持对象的序列化和反序列化操作。serialVersionUID
是用于版本控制的唯一标识符。Person
类有一个构造函数用于初始化对象的 name
和 age
属性。deepCopy()
方法通过将对象序列化为字节数组,然后再反序列化为新的对象,从而实现深拷贝。这样可以确保新对象与原对象完全独立。main
方法中,创建了一个 Person
对象并调用 deepCopy()
方法生成一个新的对象。然后修改了原始对象的 name
属性,以验证两个对象是独立的。这种方法适用于需要深拷贝的对象,特别是当对象包含其他可变对象时。
上一篇:java判断字符串是否为纯数字
下一篇:java生成唯一id
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站