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

时间:2014-11-24 11:10:25

标签: java methods clone cloning

我真的很困惑.clone()方法之间的区别是什么,或者在尝试克隆它时简单地在对象之间放置=符号。

谢谢。

5 个答案:

答案 0 :(得分:15)

如果你创建一个新狗:

Dog a = new Dog("Mike");

然后:

Dog b = a;

您有一个Dog和两个引用相同Dog的变量。因此:

a.putHatOnHead("Fedora");

if (b.hasHatOnHead()) {
    System.out.println("Has a hat: " + b.getHatName());
}

将打印出狗有Fedora帽子,因为ab引用同一条狗。

相反,做:

Dog b = a.clone();

现在你有两只狗克隆。如果你在每只狗上戴上帽子:

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

每只狗都有自己的帽子。

答案 1 :(得分:3)

让我试着解释一下:

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.

有关clone方法的更多信息,可以参考java api文档

答案 2 :(得分:1)

=符号是java中的赋值运算符。让a = b表示“我为变量a分配变量b的值。如果b是对象,则a = b生成a指向b指向的对象。复制对象,也不克隆它。

如果你想要克隆一个对象,你必须手工(丑陋),或者必须使必须克隆的类来实现Clonable,然后调用clone()

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

答案 3 :(得分:0)

使用=,你只是给同一个对象一个不同的名字。使用.clone,您将创建一个新对象,该对象是原始对象的副本。

答案 4 :(得分:-3)

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