深度拷贝
1.深度拷贝与浅拷贝的区别
浅拷贝与深拷贝的区别_成长中的向日葵的博客-CSDN博客_浅拷贝
感觉这个博客写的就很详细。
简而言之:
深拷贝是克隆技术,虽然是一模一样的,但是是两个个体,在继承原对象信息的基础下,自身的改变不会影响原对象
浅拷贝是时空穿越, 虽然看起来像是在不同时空的两个个体,但是在承继原对象信息的基础下,你穿越到任何时空的所作所为对你当前时空的本身时时刻刻有着对照的影响。
专业解释:
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
2.深拷贝的方式
1.new一个新对象手动赋值---------太low
2.推荐
//深拷贝方法
@Transactional (readOnly = false)
public Object clonDeep (Object object)
{
Object objectNew = new Object();
ObjectOutputStream oos;
ByteArrayOutputStream bos;
ObjectInputStream ois;
ByteArrayInputStream bis;
try{
//序列化
//1.创建一个字节数组输出流
//2.创建一个对象输出流
//3.将this写入oos中的bos
//4.刷写
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(object);
oos.flush();
//反序列化
bis = new ByteArrayInputStream(bos.toByteArray());
ois = new ObjectInputStream(bis);
objectNew = (Object) ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return objectNew;
}
//使用举例
detailAllocateNew = (ProductBatchOperationRecordDetailAllocate) clonDeep(detailAllocateOld);//ProductBatchOperationRecordDetailAllocate是你要操作的对象