[java项目实战] java 浅拷贝和深拷贝

本文详细介绍了Java中浅拷贝和深拷贝的概念及其应用场景。浅拷贝通过引用传递实现快速复制,适用于基本数据类型及引用类型。而深拷贝则能够完全复制对象及其引用的对象,确保数据独立性。文章提供了多种实现方式,包括使用List的构造方法、addAll方法等进行浅拷贝,以及通过序列化、重写clone方法等方式实现深拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[java项目实战] java 浅拷贝和深拷贝

在项目开发工程中我们最常见的就是使用浅拷贝进行复制,因为浅拷贝进行复制,我们只需要把旧对象的引用复制给新对象就可以了,时间复杂度和空间复杂度都非常的低,但是我们要是进行深拷贝所需要的资源就会很多了,并且在实际项目中很少能用到深拷贝,所以我们常见的方法基本都是浅拷贝,如果我们需要深拷贝,那么我在这里也介绍几种深拷贝的方法

浅拷贝

  • 数据类型是基本数据类型成员变量,浅拷贝进行值传递。因为两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据
  • 数据类型是引用数据类型的成员变量,浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。一个对象中修改该成员变量会影响到另一个对象的该成员变量值

常见浅拷贝形式

  • 遍历循环复制

    • List<Person> destList = new ArrayList<Person>(srcList.size);
      for(Person p : srcList){
      	destList.add(p);
      }
      
  • 使用List实现类的构造方法

    • List<Person> destList = new ArrayList<Person>(srcList);
      
  • 使用List.addALL()方法

    • List<Person> destList = new ArrayList<Person>();
      destList.addAll(srcList);
      
  • 重写clone()方法进行浅拷贝

  • 使用System.arraycopy()方法

深拷贝

  • 不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象图进行拷贝!

常见深拷贝形式

  • 重写clone方法来实现深拷贝

  • 对象序列化实现深拷贝

  • this.para = (Map<String, Object>) SerializationUtils.clone((HashMap<String, Object>)po.getPara());
    
  • 手动赋值,效率高,但代码过于啰嗦

  • 用fastjson从Object转成json,然后转回object,本质上是反射

  • String json = JSON.toJSONString(obj);
    return JSON.parseObject(json, Object.class);
    
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值