obj1 = obj.clone()和obj1 = obj之间的区别

时间:2014-03-26 06:54:02

标签: java clone

有人可以解释obj1 = obj.clone()obj1 = obj之间的区别吗?

4 个答案:

答案 0 :(得分:1)

显然,一个人创造了一个克隆,而另一个人没有。

obj = new Object();

obj1 = obj;               // obj1 and obj reference *the same object*

obj1 = obj.clone();       // obj1 references *a copy of* obj

答案 1 :(得分:1)

克隆(obj1 = obj.clone())表示您创建对象等于旧对象。简单分配(obj1 = obj)意味着您只需要另一个参考到同一个对象

说明它的最佳方式是考虑修改原始对象时会发生什么。

考虑以下示例:

Cat orig = new Cat();
Cat assigned = orig;
Cat cloned = orig.clone();

orig.setGrumpy(true);

最后一行让orig猫变得脾气暴躁。现在,assigned也是脾气暴躁,因为它只是对同一个对象的另一个引用。另一方面,cloned保持不变,因为一旦克隆了一个对象,就会丢失从另一个对象创建的内存。

答案 2 :(得分:0)

obj.clone()创建一个新对象 - 基本上是obj的副本。因此,在致电obj1 = obj.clone()后,您有两个不同的对象 obj1和obj。致电obj1 = obj时,objobj1都会引用相同的对象

即,在致电obj1 = obj时你会有这样的事情:

obj --> *obj* <-- obj1

致电obj1 = obj.clone()时,您会遇到以下情况:

obj --> *obj*
obj1 --> *copy of obj*

答案 3 :(得分:0)

当且仅当此对象实现Cloneable时,第一个将创建对象的新副本。如果没有,.clone()将抛出CloneNotSupportedException

第二个只是复制参考。

请参阅the javadoc for Cloneable