java深拷贝与浅拷贝

  • clone方法用于对象的克隆,一般想要克隆出的对象是独立的(与原有的对象是分开的)

  • 深拷贝指的是该对象的成员变量(如果是可变引用)都应该克隆一份,浅拷贝指的是成员变量没有被克隆一份

clone用法:

那么我们如何克隆对象呢?无论是浅拷贝还是深拷贝都是这两步:

  1. 克隆的对象要实现Cloneable接口

  2. 重写clone方法,最好修饰成public

浅拷贝:仅仅拷贝了Person对象,而date没有拷贝!

public class Person implements Cloneable {

    // 可变的成员变量
    private Date date;

    @Override
    public Object clone() throws CloneNotSupportedException {

        return super.clone();
    }

}

深拷贝:不仅拷贝了Person对象,也拷贝了date成员变量!

public class Person implements Cloneable {

    // 可变的成员变量
    private Date date;

    @Override
    public Object clone() throws CloneNotSupportedException {
        // (浅)拷贝Person对象
        Person person = (Person) super.clone();
        // 将可变的成员变量也拷贝
        person.date = (Date) date.clone();
        // 返回拷贝的对象
        return person;
    }

}

 

原文地址:https://www.cnblogs.com/cat520/p/13118275.html