深拷贝

深拷贝:在浅拷贝的基础上,引用变量也进行了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 @ 2021-03-11 18:16  edda_huang  阅读(61)  评论(0编辑  收藏  举报