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

内存级别的克隆方法行为-java,java,object,clone,instance,Java,Object,Clone,Instance,当我使用new关键字创建特定类的新对象时,它会占用堆中的一些内存 例如,我有一个类Xyz,我正在使用new关键字创建Xyz的对象,它占用了一些空间 堆内存 Xyz xyz = new Xyz(); 现在假设xyz具有内存位置12@FFD 使用克隆方法创建相同的对象 Xyz xyzClone =(Xyz) super.clone() 我的问题是,若xyzClone在堆中占用的内存与xyz不同,那个么我们为什么需要克隆方法呢 我们可以使用新关键字实现相同的行为???如果xyzClone没有占用额

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

Xyz xyz = new Xyz();
现在假设xyz具有内存位置12@FFD

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

Xyz xyzClone =(Xyz) super.clone()
我的问题是,若xyzClone在堆中占用的内存与xyz不同,那个么我们为什么需要克隆方法呢 我们可以使用新关键字实现相同的行为???如果xyzClone没有占用额外的内存 像单身汉一样


请澄清我的困惑,为什么我们需要克隆方法

创建与克隆实例状态相同的新实例

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

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

创建对象意味着您可以创建一个与另一个对象相似但不是同一个对象的对象

当您说您克隆了一个对象时,这意味着堆中有一个不同的对象具有相同的状态。但是如果你改变这个新对象,它不会改变原来的对象

我的问题是,xyzClone是否在堆中占用了与xyz不同的内存 比为什么我们需要克隆方法,我们可以实现相同的行为使用新的 关键词

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

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

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

另见:


12@FFD内存位置是否可能与@JigarJoshi重复:我清楚地提到,假设我们有一些内存位置。我的问题是为什么Clonec可以使用克隆方法使程序内存更高效。如果您更改具有另一个对象的新对象,那么它将更改原始对象。默认克隆是浅拷贝。@san De cruz:好的,我明白你的意思了。请记住,如果克隆的内存效率不高,那么我们为什么要在原型设计中使用它pattern@NiravPrajapati我希望我答案中的最后一条线索能澄清这一点