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类并没有被拷贝过来而只是获得了引用。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值