JAVA对象的深拷贝和浅拷贝

拷贝?

创建一个指向对象的引用变量的拷贝

对象拷贝会创建对象本身的一个副本,因此如果我们再一次服务我们car对象,就会创建这个对象本身的一个副本,同时还会有第二个引用变量指向这个被赋值出来的对象、

浅拷贝?

对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。“里面的对象”会在原来的对象和它3的副本之间共享。(只是新建了两个指向,实际上改变的是同一个对象)

public class Person {
    private Name name;
    private Address address;

    public Person(Person originalPerson) {
         this.name = originalPerson.name;
         this.address = originalPerson.address;
    }
[]
}

浅拷贝的问题就是两个对象并非独立的。如果你修改了其中一个Person对象的Name对象,那么这次修改也会影响另一个Person对象

深拷贝?

深拷贝是整个独立的对象拷贝。如果对整个Person对象进行深拷贝,会对整个对象的结构都进行拷贝。

在这里插入图片描述

不仅对Person对象使用了拷贝构造器还会对内部的对象也使用拷贝构造器

创建一个真正的深拷贝,需要一直拷贝下去,一直覆盖到Person对象所有的内部元素,最后只剩下原始类型以及"不可变对象" int类型的number是一个原始类型,并非对象,只是一个简单的值,不能共享,因此在创建第二个实体变量时,可以自动创建一个独立的拷贝。String是一个不可变对象。简言之,不可变对象也是对象,可一旦创建好了以后就再也不能被修改了。因此,可以不用为其创建深拷贝就能对其进行共享

总结

浅拷贝就是复制引用 深拷贝就是复制值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值