需求
需求,把一个对象复制一份新的,实现深拷贝,也就是说新旧对象的属性改变完全互不影响。
实现
原理就是将这个Object实现Serializable接口,并实现deepClone方法,在deepClone方法里,对这个对象进行序列化和反序列化的操作,那么新对象肯定就是实现了深拷贝了,代码如下:
Student.java
public class Student implements Serializable {
    private int age;
    private String name;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    protected Student deepClone() throws Exception {
        //序列化
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);
        //反序列化
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return (Student) ois.readObject();
    }
}
测试代码:
public class Test1 {
    public static void main(String[] args) throws Exception {
        Student student1 = new Student("Terry", 18);
        Student student2 = student1; //普通的clone or student1.clone();
        Student student3 = student1.deepClone(); // 深拷贝
        student1.setName("Tom");
        System.out.println(student2.getName());//把student1修改成了Tom,student2也变成了Tom
        System.out.println(student3.getName());//deepClone后,student3不会随着student1而改变了
    }
}

文章评论