浅复制和深复制
16lz
2021-01-22
浅复制和深复制
白玉 IT哈哈
概念:俗话就是拷贝一个副本
一般实现:
实现Cloneable 接口重写clone()方法
部分代码
public Object clone() { Object o = null; try { o = (Student) super.clone();// Object中的clone()识别出你要复制的是哪一 // 个对象。 } catch (CloneNotSupportedException e) { System.out.println(e.toString()); } return o; }
注意:浅复制不能同时复制引用
如果需要复制引用将需要引用的对象也克隆一下做深复制
更好的方法是利用序列化(常说的串行化)来实现深复制(不需要实现Cloneable接口,需要实现Serializable接口)
见部分代码
public Object deepClone() throws IOException, OptionalDataException, ClassNotFoundException { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); // 从流里读出来 ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (oi.readObject()); }
更多相关文章
- Swagger 自动生成 Dubbo 服务的接口文档,以及测试调用
- 为什么我们要面向接口编程?!
- 美元。针对简单的php, post返回对象
- 将JavaScript对象作为Dictionary 传递给C#WCF服务
- 通过],[和创建json对象来分割字符串
- 我通过jQuery-ajax创建了__PHP_Incomplete_Class对象此错误
- 如何从Python脚本向jQuery发送JSON对象?
- jQuery 事件绑定方法(bind hover toggle live.... )、删除事件方法
- jQuery:在对象内使用.remove()而不是Regex