// 深拷贝示例代码:使用序列化实现深拷贝
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 中文站