Java中浅拷贝与深拷贝的区别

Java中浅拷贝与深拷贝的区别

        今天在在学习java中,看到了clone()方法,查看一些资料,以及自己探索了一些关于浅克隆(shadow)与深克隆(deep clone)之间的关系,就此来发表一些我自己的看法。

 浅拷贝:       首先,浅拷贝实际上就是在拷贝成员变量的时候,只拷贝了基本数据类型和String数据类型。因为String数据类型是一种特殊的引用类型,JDK的设计者将String类型设计成了“不可变”(相对于StringBuffer和StringBuilder来说)的字符串,所以在这里可以把String类型的变量当成一个常量。

        但是,对于普通的引用数据类型,浅拷贝只是把这个数据类型的地址拷贝了一份,地址所指向的数据内容,并没有拷贝,所以可以看做是两个地址指向了同一个内容。因此,当要改变一个对象的引用类型的成员变量时,那么,就要改变引用数据的内容。但是这样一来,内容发生改变,那么拷贝的对象所指向这个内容的地址可能没变,但是内容也已经发生了变化。

        我们可以把这个引用数据的内容看做是一个人,而两个指向内容的地址,就像是一个人的两个名字一样。

        所以,浅拷贝:当一个对象的引用数据内容发生变化,那么另一个对象的引用数据内容就也会发生变化。

深拷贝:深拷贝中所拷贝出来的对象和原本对象之间没有存在关系,他们是两个相互独立存在的对象,即一个对象发生改变,另一个对象并不会发生改变。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值