Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 使用.clone()方法克隆对象与使用=符号克隆对象有什么区别?_Java_Methods_Clone_Cloning - Fatal编程技术网

Java 使用.clone()方法克隆对象与使用=符号克隆对象有什么区别?

Java 使用.clone()方法克隆对象与使用=符号克隆对象有什么区别?,java,methods,clone,cloning,Java,Methods,Clone,Cloning,我真的很困惑.clone()方法和试图克隆对象时在对象之间简单地放置=符号有什么区别 谢谢。使用=您只是给同一对象赋予了不同的名称。使用.clone创建的新对象是原始对象的副本。如果创建新的狗: Dog a = new Dog("Mike"); 然后: Dog b = a; 您将有一个Dog和两个引用相同Dog的变量。因此,我们要: a.putHatOnHead("Fedora"); if (b.hasHatOnHead()) { System.out.println("Has a

我真的很困惑
.clone()
方法和试图克隆对象时在对象之间简单地放置
=
符号有什么区别


谢谢。

使用
=
您只是给同一对象赋予了不同的名称。使用
.clone
创建的新对象是原始对象的副本。

如果创建新的狗:

Dog a = new Dog("Mike");
然后:

Dog b = a;
您将有一个
Dog
和两个引用相同
Dog
的变量。因此,我们要:

a.putHatOnHead("Fedora");

if (b.hasHatOnHead()) {
    System.out.println("Has a hat: " + b.getHatName());
}
将打印狗戴着软呢帽,因为
a
b
引用同一只狗

相反,做:

Dog b = a.clone();
现在你有了两只克隆狗。如果你给每只狗戴上帽子:

a.putHatOnHead("Rayden");
b.putHatOnHead("Fedora");

每只狗都有自己的帽子。

符号是java中的赋值运算符。拥有
a=b
意味着“我给变量
a
分配变量
b
的值。如果
b
是一个对象,则
a=b
使
a
指向
b
所指向的对象。它不会复制或克隆该对象

如果你想克隆一个对象,你要么手工(丑陋),要么让必须是可克隆的类实现
clonable
,然后调用
clone()


clone()
与“丑陋”方式相比的优势在于,使用
clone()
时,要克隆的类的开发人员定义了如何进行克隆,以确保副本是合法的工作副本。

让我试着解释一下:

Object obj = new Object();  //creates a new object on the heap and links the reference obj to that object
案例1:

Object obj2 = obj;  //there is only one object on the heap but now two references are pointing to it.
案例2:

Object obj2 = obj.clone(); //creates a new object on the heap, with same variables and values contained in obj and links the reference obj2 to it.

有关克隆方法的更多信息,请参阅java api文档

=
创建对同一对象的新引用。
clone()
创建一个新的物理对象,其属性与先前的相同

可能的重复是否意味着它应该被否决?是的,先生,我只是这个网站的新手,但我仍然很感激我所得到的。感谢您的明确指示,现在事情变得更清楚了:)谢谢您的努力,现在我很舒服可以说我理解了整个概念:)当问题在几年前得到回答时,如果您没有任何补充,请不要回答。您所说的一切都已经包含在以前的答案中。@AnmolParikh只是为了通知您。您的答案目前在Meta Stack Overflow上讨论: