猿问

深拷贝,浅拷贝,克隆

深拷贝,浅拷贝,克隆

我需要澄清深度拷贝,浅拷贝和Java中的克隆之间的区别



炎炎设计
浏览 422回答 3
3回答

蝴蝶不菲

术语“克隆”是不明确的(尽管Java类库包括Cloneable接口),并且可以引用深拷贝或浅拷贝。深/浅副本不是专门与Java相关联的,而是与制作对象副本有关的一般概念,并且指的是如何复制对象的成员。举个例子,假设你有一个人类:class&nbsp;Person&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name; &nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;emailAddresses}你如何克隆这个类的对象?如果要执行浅表副本,则可以复制名称并emailAddresses在新对象中添加引用。但是如果你修改了emailAddresses列表的内容,你将修改两个副本中的列表(因为这是对象引用的工作方式)。深层复制意味着您递归复制每个成员,因此您需要为new创建一个新List的Person,然后将内容从旧对象复制到新对象。虽然上面的示例很简单,但深度和浅份副本之间的差异很大,并且对任何应用程序都有重大影响,特别是如果您要提前设计一个通用的克隆方法,而不知道某人以后如何使用它。有时候你需要深层或浅层语义,或者某些混合,你可以深层复制某些成员但不需要其他成员。

慕桂英3389331

深层复制:克隆此对象以及对其具有的每个其他对象的每个引用浅拷贝:克隆此对象并保留其引用Object clone()抛出CloneNotSupportedException:没有指定它是应该返回深拷贝还是浅拷贝,但至少是:o.clone()!= o
随时随地看视频慕课网APP

相关分类

Java
我要回答