java浅拷贝深拷贝 序列化进行拷贝 延迟拷贝

文章参考:https://juejin.im/post/5c988a7ef265da6116246d11

拷贝的目的

大多数情况下是在新的上下文环境中复用原有对象的大部分或全部数据

浅拷贝

1.浅拷贝对象为基本数据类型: 将基本数据类型的值 拷贝一份
2. 浅拷贝对象为引用数据类型: 将该对象的地址拷贝一份 若修改了原数据的值 就会影响拷贝的对象的值
3. 实现 直接调用Object.copy()即可

深拷贝

1.深拷贝对象为基本数据类型: 将对象的值拷贝一份
2.深拷贝对象为引用数据类型: 创建一个新的对象 和被拷贝对象一致 将被拷贝对象的所有值放入新的对象中 从此旧有对象做的所有改变不会再影响到新拷贝的对象
3.实现 重写clone()方法 创建一个相同的对象
4.缺点: 相对于浅拷贝时间长 花销大

浅拷贝与深拷贝的选择

  1. 当数据类型全部是基本数据类型时 应该使用浅拷贝
  2. 当数据类型有引用类型时 要根据具体需求 如果对象的值不会被改变 则应该选择浅拷贝 若引用对象经常发生改变 应该使用深拷贝

序列化进行拷贝

  1. 定义 将对象写入到一个可持久保存的序列文件中,并在需要的时候将它读取出来 属于深拷贝
  2. 要求: 被序列化拷贝的对象需要实现Serializable接口
  3. 实现
    3.1 确保对象图中的所有类都是可序列化的
    3.2创建输入输出流
    3.3使用这个输入输出流来创建对象输入和对象输出流
    3.4将你想要拷贝的对象传递给对象输出流
    3.5从对象输入流中读取新的对象并且转换回你所发送的对象的类

延迟拷贝

  1. 定义 是浅拷贝和深拷贝的组合
  2. 在拷贝一开始使用的浅拷贝 并使用一个计数器来记录有多少对象共享这个数据 他会决定被共享数据是否需要深拷贝 实际很少用到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值