为了账号安全,请及时绑定邮箱和手机立即绑定

深拷贝,浅拷贝,克隆

深拷贝,浅拷贝,克隆

炎炎设计 2019-07-31 18:51:58
深拷贝,浅拷贝,克隆我需要澄清深度拷贝,浅拷贝和Java中的克隆之间的区别
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

术语“克隆”是不明确的(尽管Java类库包括Cloneable接口),并且可以引用深拷贝或浅拷贝。深/浅副本不是专门与Java相关联的,而是与制作对象副本有关的一般概念,并且指的是如何复制对象的成员。

举个例子,假设你有一个人类:

class Person {
    String name;
    List<String> emailAddresses}

你如何克隆这个类的对象?如果要执行浅表副本,则可以复制名称并emailAddresses在新对象中添加引用。但是如果你修改了emailAddresses列表的内容,你将修改两个副本中的列表(因为这是对象引用的工作方式)。

深层复制意味着您递归复制每个成员,因此您需要为new创建一个新ListPerson,然后将内容从旧对象复制到新对象。

虽然上面的示例很简单,但深度和浅份副本之间的差异很大,并且对任何应用程序都有重大影响,特别是如果您要提前设计一个通用的克隆方法,而不知道某人以后如何使用它。有时候你需要深层或浅层语义,或者某些混合,你可以深层复制某些成员但不需要其他成员。


查看完整回答
反对 回复 2019-07-31
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

  • 深层复制:克隆此对象以及对其具有的每个其他对象的每个引用

  • 浅拷贝:克隆此对象并保留其引用

  • Object clone()抛出CloneNotSupportedException:没有指定它是应该返回深拷贝还是浅拷贝,但至少是:o.clone()!= o


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 421 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信