有人可以解释obj1 = obj.clone()
和obj1 = obj
之间的区别吗?
答案 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
时,obj
和obj1
都会引用相同的对象。
即,在致电obj1 = obj
时你会有这样的事情:
obj --> *obj* <-- obj1
致电obj1 = obj.clone()
时,您会遇到以下情况:
obj --> *obj*
obj1 --> *copy of obj*
答案 3 :(得分:0)
当且仅当此对象实现Cloneable
时,第一个将创建对象的新副本。如果没有,.clone()
将抛出CloneNotSupportedException
。
第二个只是复制参考。