深拷贝
深拷贝:在浅拷贝的基础上,引用变量也进行了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对比(深拷贝)