对象拷贝和引用拷贝

本文探讨了浅拷贝和深拷贝在Java对象复制中的概念,强调了浅拷贝仅复制对象本身,而深拷贝包括复制引用类型并开辟新空间。还提到了实现深拷贝需要重写`Cloneable`接口和`Clone`方法。小作业展示了引用类型改变的原因是新创建的对象拥有独立的内存空间。
摘要由CSDN通过智能技术生成

深拷贝、浅拷贝都是特指对象间的一种行为,属于对象拷贝

对象拷贝和引用拷贝是两个概念!!

对象拷贝

引用拷贝

深拷贝和浅拷贝:

浅拷贝

将当前对象完全赋值一份,但注意对象中的属性如果有引用类型,则两个对象的引用类型指的是同一个空间。

如果是修改的基本数据类型,则通过另一个引用获取到的不会发生变化;

如果是修改的引用类型,则通过另一个引用获取到的也会发生变化; 

而深拷贝则都不会发生变化,因为该对象中的引用类型也重新开辟了一个新的空间

深拷贝

浅拷贝和(直接)赋值:

赋值分为普通类型和引用类型:

普通类型就是直接的赋值,本身不存在地址

引用类型则是直接将当前的引用赋值过去,等同于浅拷贝?

完全不相等赋值引用本质就是一个对象,同时被两个引用所指,属于引用拷贝

而浅拷贝是通过当前对象又赋值出了一份对象在堆中

相关代码

类需要实现Cloneable接口【只是一种标记,代表可以被克隆】,否则会报错

同时类还需要重写Clone方法,因为Object中的Clone方法为Protected【重写方法的访问权限只能提高或者不变,不能降低,如不能从protected修改为private】

浅拷贝

深拷贝,同时引用属性的所在类也要被拷贝,即重写clone方法和实现Cloneable接口

小作业

以下情况引用类型为什么会被修改?

因为我们通过修改car属性是直接new了一个对象,它是直接在堆中开辟了一个新的空间,强行把我们拷贝出来的对象的car引用指向了另一个空间~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值