java浅拷贝和深拷贝的区别

浅拷贝是指:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制。

深拷贝是指:不仅复制当前的对象,如果对象中还存在引用,则将引用的对象一起复制。

java中使用到的clone方法是浅拷贝,下面是简单演示:

首先定义一个简单类A,申明一个属性aa = 1;

public class A {
    int aa = 1;
}
定义一个可克隆类C,在C类中申明了类A、一个int属性b值为1;

public class C implements Cloneable{
    A a = new A();
    int b = 1;
    public Object clone(){
        Object c = null;
        try {
            c = super.clone();
        } catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return c;
    }
}

在测试类中,创建一个c类的对象,申明c1为c的克隆对象,在克隆后再次将c类中b属性的值赋为10,A类中aa属性赋值为10;

public class Test {
    public static void main(String[] args) {
        C c = new C();
        C c1 = (C)c.clone();
        c.a.aa = 10;
        c.b = 10;
        System.out.println(c.a.aa);
        System.out.println(c1.b);
    }

}

输出的值依次为10和1;

可见C类中的A类并没有被拷贝过来而只是获得了引用。

通过序列化方式实现深拷贝:先将要拷贝对象写入到内存中的字节流中,然后再从这个字节流中读出刚刚存储的信息,作为一个新对象返回,那么这个新对象和原对象就不存在任何地址上的共享,自然实现了深拷贝。

你可能感兴趣的:(java基础)