Q
由值
2
A
回答
3
当您执行Object 'A'
的克隆时,您将创建一个新的Object 'B'
(与对象的引用相同),但是位于不同的内存地址中。因此,当您修改对象'A'时,您没有访问与Object 'B'
相同的内存地址。因此,克隆中的更改不会反映回原始,反之亦然。
浅复制
一般克隆对象的方法,创建了同一个类,并将所有领域的新实例的新实例,并将其返回。这只不过是浅拷贝。对象类提供了一种克隆方法,并为浅拷贝提供支持。它将类型返回为“Object”,并且需要明确地将其转换回原始对象。
深复制
当你需要一个深拷贝,那么你需要实现它自己。当复制的对象包含其他对象时,其引用将以深度复制的方式递归复制。当您实施深度复制时,请小心,因为您可能会陷入循环依赖。如果你不想实现深层复制,那么你可以去序列化。它确实隐式地实现了深层复制,并且正常地处理循环依赖。
这里一个说明性示例:
浅
深:
4
克隆的整体目的是为不同于原来的--所以克隆的变化都不是体现在原来的。否则,你可以使用简单的分配而不是克隆。
例如
MyClass a = new MyClass(); // some cloneable class
MyClass b = a; // not a clone, changes to `b` will affect in `a`
// assignment duplicates the reference
-or-
MyClass b = a.clone(); // clone, changes to `b` will not affect in `a`
// clone duplicates the object
实际上有一篇关于Java克隆的维基百科文章here。
相关问题
- 1. 由值
- 2. 由值
- 3. 由值
- 4. 由值
- 5. Python2由值
- 6. 值由外键
- 7. 由2个值
- 8. 由两个值
- 9. 由特定值
- 10. 的价值由
- 11. 由键值
- 12. 由多个值
- 13. HashMap中,由值
- 14. PHP由值
- 15. 由最小值
- 16. ImmutableJS:由价值
- 17. 由总价值
- 18. PHP由值
- 19. RGBA值由AntiSamy
- 20. GetTokenSecret值由dotnetopenauth
- 21. 星火由值
- 22. 由子键值
- 23. 由最大值
- 24. 排序由值
- 25. SQL /由列值
- 26. 由基值
- 27. 由多个值
- 28. jquery的,由值
- 29. 由non_missing价值
- 30. 由新值
你误解了克隆。一旦对象被克隆,将会有一个新的对象。它们是不同的对象,所以你在B上改变从不影响A.然而,在浅层克隆中,一些成员将在这两个对象上共享,因为这些成员的引用也被克隆。 –
所以,如果我添加一个类对象到原来的,它不应该显示在克隆中,反之亦然? – Floose