我真的很困惑.clone()
方法之间的区别是什么,或者在尝试克隆它时简单地在对象之间放置=
符号。
谢谢。
答案 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帽子,因为a
和b
引用同一条狗。
相反,做:
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()
创建一个具有与前一个相同属性的新物理对象