java对象的深拷贝浅拷贝
2012-09-03 21:02
357 查看
浅析Java中的深拷贝与浅拷贝
2009-05-19 17:28 ttkktt ttkktt的博客 我要评论(1) 字号:T | T本文向您介绍程深拷贝和浅拷贝的概念,并通过一段Java示例代码向您展示Java中深拷贝与浅拷贝的实现。
AD: 51CTO云计算架构师峰会 抢票进行中!
首先我们看看浅拷贝和深拷贝的定义
浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制
深拷贝:对象,对象内部的引用均复制
为了更好的理解它们的区别我们假设有一个对象A,它包含有2对象对象A1和对象A2
对象A进行浅拷贝后,得到对象B但是对象A1和A2并没有被拷贝
对象A进行深拷贝,得到对象B的同时A1和A2连同它们的引用也被拷贝
在理解了深拷贝和浅拷贝后,我们来看看Java的深拷贝和浅拷贝实现。java.lang.Object的clone()方法默认是返回一个前拷贝对象。因此如果要用clone()方法实现一个深拷贝,我们必须对每个对象的clone()方法进行特别实现。当对象层次复杂的时候,这样做不但困难而且浪费时间和容易出现错误,特别有时候你不但需要深拷贝同时你也对这个对象进行浅拷贝的时候,你会发现写这个clone()方法真不是一个好的解决方案。
那么除了clone()方法,我们还可以怎么实现呢?答案是序列化,实现步骤和思路是把要拷贝的对象输出成byte array,然后再利用ObjectInputStream转换出新的对象。下面是代码
public static Object copy(Object oldObj) { Object obj = null; try { // Write the object out to a byte array ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(oldObj); out.flush(); out.close(); // Retrieve an input stream from the byte array and read // a copy of the object back in. ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bis); obj = in.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } return obj; } |
相关文章推荐
- 【Java】对象的拷贝
- Java对象复制和数组复制(拷贝)
- Java对象克隆:浅拷贝和深拷贝
- java学习笔记-数组,对象的拷贝
- java中的对象拷贝
- Java对象拷贝(BeanUtil.copyProperties 方法)
- java提高篇(五)-----使用序列化实现对象的拷贝
- JAVA 对象拷贝
- java 对象深拷贝通用方法
- 【Java基础】对象拷贝
- java__反射、批处理、对象拷贝
- java对象拷贝之BeanUtils.copyProperties() 用法
- Java对象的拷贝
- 2种方法实现java对象的深拷贝
- JAVA 对象拷贝
- java传递是引用的拷贝,既不是引用本身,更不是对象
- java 拷贝对象
- JAVA 对象拷贝
- java 对象深拷贝通用方法
- Java提高—对象克隆(复制)/对象属性拷贝