猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何在Java中对象进行深度复制?
如何在Java中对象进行深度复制?在java中,实现深度对象复制函数有点困难。您采取了哪些步骤来确保原始对象和克隆对象不共享引用?
郎朗坤
浏览 1282
回答 3
3回答
哈士奇WWW
一种安全的方法是序列化对象,然后反序列化。这确保了一切都是全新的参考。这是一篇文章关于如何有效地做到这一点。注意:类有可能覆盖序列化,例如新实例不为单身汉而创建的。当然,如果您的类不是可序列化的,这也是不起作用的。
0
0
0
慕莱坞森
有几个人提到使用或重写Object.clone()..别这么做。Object.clone()存在一些主要问题,而且在大多数情况下都不鼓励使用它。请参阅项目11,从“有效Java“约书亚·布洛赫给你一个完整的答案,我相信你可以安全地使用Object.clone()在基本类型数组上,但是除此之外,您还需要正确地使用和重写克隆。依赖序列化(XML或其他方式)的方案是不切实际的。这里没有简单的答案。如果要深入复制对象,则必须遍历对象图,并通过对象的复制构造函数或静态工厂方法显式地复制每个子对象。不变(例如)String不需要复制。顺便说一句,出于这个原因,你应该赞成不变性。
0
0
0
开心每一天1111
您可以使用序列化进行深度复制,而无需创建文件。您希望深入复制的对象将需要implement serializable..如果类不是最终类或无法修改,则扩展类并实现可序列化。将类转换为字节流:ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(object); oos.flush();oos.close();bos.close();byte[] byteData = bos.toByteArray();从字节流还原类:ByteArrayInputStream bais = new ByteArrayInputStream(byteData);(Object) object = (Object) new ObjectInputStream(bais).readObject();
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续