在内存级别克隆方法行为 - java

时间:2014-11-17 05:45:30

标签: java object clone instance

当我使用new关键字创建特殊类的新对象时,它会在堆中占用一些内存 例如,我有类Xyz,我使用new关键字创建Xyz的对象,它占用了一些 堆中的内存

Xyz xyz = new Xyz();

现在假设xyz有内存位置12@FFD

使用克隆方法创建相同的对象

Xyz xyzClone =(Xyz) super.clone()

我的问题是,如果xyzClone占用堆中的不同内存而不是xyz,那么我们需要克隆方法 我们可以使用new关键字实现相同的行为???如果xyzClone没有占用额外的内存 表现得像Singleton

请清除我为什么需要克隆方法的困惑???

3 个答案:

答案 0 :(得分:3)

clone()创建new个实例,该实例具有与克隆它相同的状态

答案 1 :(得分:2)

创建Object#clone意味着您可以创建一个与另一个对象类似但不是同一个对象的对象。

当你说你有cloned个对象时,这意味着heap中有一个具有相同状态的不同对象。但是如果你改变这个新对象,它就不会改变原始对象

  

我的问题是,如果xyzClone在堆中占用的内存不同于xyz   为什么我们需要克隆方法,我们可以使用new实现相同的行为   关键字?

clone()将对象的值复制到另一个对象。因此,我们不需要编写显式代码来将对象的值复制到另一个。

复制构造函数用于创建通过值传递给函数的对象的副本。这在Java中不是问题,因为Java程序中的所有对象都是通过引用传递的。

如果我们通过new关键字创建另一个对象并将另一个对象的值分配给此对象,则需要对该对象进行大量处理。因此,为了保存额外的处理任务,我们使用clone()方法。

另见:

答案 2 :(得分:1)

是的,您可以通过在类中创建任何新方法来实现与clone相同的功能。但是克隆会给你更多的控制权。通过克隆,您可以创建浅拷贝(默认)以及深拷贝(如果需要)。

它只是Object类的内置功能,可让您控制对象克隆。