深拷贝

深拷贝:在浅拷贝的基础上,引用变量也进行了clone,并指向clone产生的新对象
浅拷贝:被复制对象的所有值属性都含有与原来对象的相同,但是对象引用属性仍然指向原来的对象

 

浅拷贝

Cloneable 

  • 没有public object clone。不知道他搞什么飞机。继承接口还不是public的。要自己调用object.clone.
  • 是浅拷贝,如果有对象数组,还是指针引用

 

public Object clone() throws CloneNotSupportedException {
    Employee employee_cloned = (Employee) super.clone();
    employee_cloned.car_cloned = car.clone();
    return employee_cloned;
  }

 

深拷贝

  • fastJosn
public static<T> T convert(Object src, Class<T> clazz) {
    String json =JSON.toJSONString(src);
    return  JSON.parseObject(json, clazz);
}
  • SerializationUtils.clone
  • io
    复制代码
    public static <T extends Serializable> T clone(T obj) {
        T cloneObj = null;
        try {
          //写入字节流
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          ObjectOutputStream obs = new ObjectOutputStream(out);
          obs.writeObject(obj);
          obs.close();
    
          //分配内存,写入原始对象,生成新对象
          ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
          ObjectInputStream ois = new ObjectInputStream(ios);
          //返回生成的新对象
          cloneObj = (T) ois.readObject();
          ois.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
        return cloneObj;
      }
    复制代码

clone+beanCom实现深拷贝

 

 

对象拷贝之Apache BeanUtils、Spring的BeanUtils、Mapstruct、BeanCopier、PropertieyUtils对比(深拷贝)

Java 浅拷贝和深拷贝的理解和实现方式

posted @   edda_huang  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示