Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java obj1=obj.clone()和obj1=obj之间的差异_Java_Clone - Fatal编程技术网

Java obj1=obj.clone()和obj1=obj之间的差异

Java obj1=obj.clone()和obj1=obj之间的差异,java,clone,Java,Clone,谁能解释一下obj1=obj.clone()和obj1=obj之间的区别吗?显然,一个创建了克隆,另一个没有 obj = new Object(); obj1 = obj; // obj1 and obj reference *the same object* 对 obj1 = obj.clone(); // obj1 references *a copy of* obj obj.clone()创建一个新对象-基本上是obj的副本。因此,在调用obj

谁能解释一下
obj1=obj.clone()
obj1=obj
之间的区别吗?

显然,一个创建了克隆,另一个没有

obj = new Object();

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

obj1 = obj.clone();       // obj1 references *a copy of* obj
obj.clone()
创建一个新对象-基本上是obj的副本。因此,在调用
obj1=obj.clone()
之后,您有两个不同的对象。调用
obj1=obj
时,
obj
obj1
都将引用相同的对象

i、 例如,当调用
obj1=obj
时,您会遇到如下情况:

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

当且仅当此对象实现了
Cloneable
时,第一个将创建对象的新副本。否则,
.clone()
将抛出

第二个简单地复制引用

请参见

克隆(
obj1=obj.clone()
)意味着您创建了一个与旧对象相等的新对象。简单赋值(
obj1=obj
)意味着对同一对象有另一个引用

最好的说明方法是思考修改原始对象时会发生什么

考虑以下示例:

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

orig.setGrumpy(true);

最后一行将
orig
cat变为脾气暴躁。现在,
assigned
也很暴躁,因为它只是对同一对象的另一个引用<代码>克隆,另一方面,保持不变,因为一旦克隆对象,就会丢失从另一个对象创建的所有内存。

obj1=obj.clone是obj的克隆。复制对象。ob1=obj只是obj作为obj1的参考。如果您在obj中更改了某些内容,它将反映obj1。上一个不是,甚至不是
clone()
是一个令人难以置信的漏洞,应该很少使用。