3 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
术语“克隆”是不明确的(尽管Java类库包括Cloneable接口),并且可以引用深拷贝或浅拷贝。深/浅副本不是专门与Java相关联的,而是与制作对象副本有关的一般概念,并且指的是如何复制对象的成员。
举个例子,假设你有一个人类:
class Person { String name; List<String> emailAddresses}
你如何克隆这个类的对象?如果要执行浅表副本,则可以复制名称并emailAddresses
在新对象中添加引用。但是如果你修改了emailAddresses
列表的内容,你将修改两个副本中的列表(因为这是对象引用的工作方式)。
深层复制意味着您递归复制每个成员,因此您需要为new创建一个新List
的Person
,然后将内容从旧对象复制到新对象。
虽然上面的示例很简单,但深度和浅份副本之间的差异很大,并且对任何应用程序都有重大影响,特别是如果您要提前设计一个通用的克隆方法,而不知道某人以后如何使用它。有时候你需要深层或浅层语义,或者某些混合,你可以深层复制某些成员但不需要其他成员。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
深层复制:克隆此对象以及对其具有的每个其他对象的每个引用
浅拷贝:克隆此对象并保留其引用
Object clone()抛出CloneNotSupportedException:没有指定它是应该返回深拷贝还是浅拷贝,但至少是:o.clone()!= o
添加回答
举报
0/150
提交
取消