clone()方法是否等同于Java中的pass-by-value概念

时间:2017-02-22 20:03:59

标签: java oop cloneable

Java中的

Clone()方法提供了将一个对象克隆到另一个对象的方法,因此第二个对象所做的更改不会反映在第一个对象中。 我的问题是使用clone()并使用pass-by-value是等价的,或者它们之间存在差异。

2 个答案:

答案 0 :(得分:1)

他们没有关联,因为@Kayaman说,但他们的行为相似。克隆在内存中的新位置创建副本,因此第二个对象所做的任何更改都不会反映在第一个对象中。如果您将此克隆用作方法中的参数并且此方法更改它,则会针对克隆反映更改,这将通过引用传递给克隆对象。

答案 1 :(得分:1)

按值传递意味着您将对象的副本传递给被调用的函数。由于您正在克隆对象然后传递给函数,因此它将提供相同的效果,并且对克隆对象的更改不会反映到原始对象上。

但是,这取决于您如何克隆对象。如果使用浅克隆来克隆对象并将其传递给函数并对克隆对象内对象的引用执行操作,则引用的对象可能会更改,并且效果会有所不同,这是不希望的。

对于Ex:

 class A
{
 int a;
}

class B implements Cloneable{
int b;
A a;
public B clone(){
B obj= new B();
obj.b=this.b;
obj.a=this.a;
}
}

在这种情况下,clone方法将复制对象a的引用,对该对象的任何更改都将导致对o的实际对象的更改。

因此,要产生与传递值相同的效果,应使用深度克隆。

并回答你的问题。他们不同!!!

相关问题