当我使用new关键字创建特殊类的新对象时,它会在堆中占用一些内存
例如,我有类Xyz
,我使用new关键字创建Xyz
的对象,它占用了一些
堆中的内存
Xyz xyz = new Xyz();
现在假设xyz
有内存位置12@FFD
使用克隆方法创建相同的对象
Xyz xyzClone =(Xyz) super.clone()
我的问题是,如果xyzClone
占用堆中的不同内存而不是xyz
,那么我们需要克隆方法
我们可以使用new关键字实现相同的行为???如果xyzClone
没有占用额外的内存
表现得像Singleton
请清除我为什么需要克隆方法的困惑???
答案 0 :(得分:3)
clone()
创建new
个实例,该实例具有与克隆它相同的状态
答案 1 :(得分:2)
创建Object#clone
意味着您可以创建一个与另一个对象类似但不是同一个对象的对象。
当你说你有cloned
个对象时,这意味着heap
中有一个具有相同状态的不同对象。但是如果你改变这个新对象,它就不会改变原始对象
我的问题是,如果xyzClone在堆中占用的内存不同于xyz 为什么我们需要克隆方法,我们可以使用new实现相同的行为 关键字?
clone()
将对象的值复制到另一个对象。因此,我们不需要编写显式代码来将对象的值复制到另一个。
复制构造函数用于创建通过值传递给函数的对象的副本。这在Java中不是问题,因为Java程序中的所有对象都是通过引用传递的。
如果我们通过new
关键字创建另一个对象并将另一个对象的值分配给此对象,则需要对该对象进行大量处理。因此,为了保存额外的处理任务,我们使用clone()
方法。
另见:
答案 2 :(得分:1)
是的,您可以通过在类中创建任何新方法来实现与clone相同的功能。但是克隆会给你更多的控制权。通过克隆,您可以创建浅拷贝(默认)以及深拷贝(如果需要)。
它只是Object类的内置功能,可让您控制对象克隆。