【问题标题】:Does copy of an object through copy constructor get the same instance variable as the original object?通过复制构造函数复制对象是否获得与原始对象相同的实例变量?
【发布时间】:2017-03-03 21:48:16
【问题描述】:

具有对象实例变量的对象副本是否获得与原始对象相同的实例变量?如果是这样,我想知道原始对象和副本对象是否引用了相同的实例变量。

【问题讨论】:

  • 如果他们是ints(或任何其他原语),没有。如果它们是引用类型,则取决于复制ctor的实现。
  • 复制构造函数是人类编写的代码。因此,答案取决于构造函数主体中的代码。如果您显示一些示例代码,我们可以提供明确的答案。
  • 是的,正如@AndyTurner 提到的,您可能需要阅读有关克隆类型的信息,即深克隆和浅克隆
  • @Coder,您的意思是要编辑您的问题 以包含该代码吗?
  • 注意“克隆”这个词,Java 世界中的许多人将其理解为使用Object#clone 方法。该方法是创建对象副本的一种方法,但有技巧和陷阱,包括@YohannesGebremariam 提到的深/浅复制问题。不基于clone 的复制构造函数和复制方法也必须处理深副本和浅副本,但可以避免clone 的一些复杂性。

标签: java object copy-constructor


【解决方案1】:

与 C++ 不同,Java 不自动提供复制构造函数。因此,对于任何关于复制构造函数行为的问题都没有一般的答案,因为 Java 对它们的行为没有任何限制。

尽管如此,每个对象,无论如何初始化,都有自己的实例变量。这些不与任何其他对象共享;它们可以与另一个对象的“相同”,只是在保持相同值的意义上。 int 等原始类型的变量完全相互独立。任何两个引用类型的变量都可以保存引用同一个对象的值,但是,只要它们声明的类型都与该对象的类兼容。复制构造函数可以轻松创建这样的效果,但绝不需要这样做。

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 2015-06-11
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2015-01-05
    • 2016-01-10
    相关资源
    最近更新 更多