使用new
关键字创建对象和使用clone()
创建对象有什么区别?内存分配有什么区别吗?
答案 0 :(得分:3)
new
运算符实例化新对象,而clone()
更像是复制构造函数。 clone()
方法创建对象的副本,其中还复制了成员属性的值。
答案 1 :(得分:3)
new
根据构造函数创建一个对象,而clone()
创建一个新对象并使用原始对象的内容初始化字段。
我接受了,你读了javadoc,让我举几个例子:
public class MyBaby implements Cloneable {
int age = 0;
String name = "Dolly";
List<String> list = new ArrayList<String>();
public static void main(String[] args) {
MyBaby originalBaby = new MyBaby();
originalBaby.setAge(1);
try {
// We clone the baby.
MyBaby clonedBaby = (MyBaby) originalBaby.clone();
// both babies now have: age 1, name "Molly" and an empty arraylist
originalBaby.setAge(2);
// originalBaby has age 2, the clone has age 1
originalBaby.setName("Molly");
// same goes for the String, both are individual fields
originalBaby.getList().add("addedString");
// both babies get the string added to the list,
// because both point to the same list.
System.out.println(clonedBaby.toString());
}
catch (CloneNotSupportedException e) {}
}
}
javadoc说:
此方法执行此对象的“浅拷贝”,而不是“深度” 复制“操作。
解释了我们宝宝列表的行为:复制了引用,而不是引用的元素,因此我们的副本是“浅”
内存分配当然可以有所不同:
答案 2 :(得分:1)
简单说明,
new创建一个实例
,而
clone返回实例的克隆。
答案 3 :(得分:1)
Clone()创建同一个类的新实例,并将所有字段复制到新实例并返回它(浅层复制)。
而 new 关键字是创建对象(http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html)的Java运算符。
答案 4 :(得分:0)
仅当创建对象的成本很高时,才应使用克隆,而我们宁愿克隆并设置行为。