菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
360
0

深拷贝

原创
05/13 14:22
阅读数 61082

深拷贝:在浅拷贝的基础上,引用变量也进行了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 浅拷贝和深拷贝的理解和实现方式

发表评论

0/200
360 点赞
0 评论
收藏
为你推荐 换一批