new
使用关键字创建对象和使用创建对象有什么区别clone()
?内存分配有什么区别吗?
问问题
5344 次
5 回答
5
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 说:
此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。
这解释了我们婴儿列表的行为:引用被复制,而不是被引用的元素,因此我们的复制是“浅的”
内存分配当然可以不同:
- 您可以在构造函数中初始化字段
- clone 可以初始化一个字段,即一个数组
于 2012-11-30T14:45:49.417 回答
3
new
运算符实例化新对象,而clone()
更像是一个复制构造函数。clone()
方法创建对象的副本,其中成员属性的值也被复制。
于 2012-11-03T05:04:18.207 回答
1
简单地说,
new 创建一个实例
尽管
clone 返回一个实例的克隆。
于 2012-11-03T05:05:22.050 回答
1
Clone()创建同一类的新实例并将所有字段复制到新实例并返回它(浅复制)。
而new关键字是创建对象的 Java 运算符 ( http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html )。
于 2012-11-03T05:06:51.073 回答
0
- new() 按照默认构造函数构造对象。
- clone() 对引用进行浅拷贝。
只有在对象创建成本很高并且我们宁愿克隆并设置行为时,我们才应该使用克隆。
于 2020-09-08T02:59:50.483 回答