深拷贝浅拷贝学习笔记

浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。即:浅拷贝只拷贝引用,深拷贝拷贝引用和对象。 

浅拷贝引发的内存泄漏

        由于浅拷贝只拷贝指针导致两个指针指向同一块地址,会导致释放内存时这块内存被释放两次,会导致内存泄漏。

浅拷贝的实现:

// 测试代码
Person p1 = new Person(23, "root");
Person p2 = p1.clone();

深拷贝的实现:

// 测试类
public class Person implements Cloneable {
    ...
    public Person clone() throws CloneNotSupportedException {
        Person cloned = (Person)super.clone();
        cloned.name = (String)name.clone();
        return cloned;
    }
}

如果想要深拷贝一个对象, 这个对象必须要实现Cloneable接口,实现clone方法,并且在clone方法内部,把该对象引用的其他对象也要clone一份 , 这就要求这个被引用的对象必须也要实现Cloneable接口并且实现clone方法。

猜你喜欢

转载自blog.csdn.net/weixin_38785199/article/details/82942291