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