6

new使用关键字创建对象和使用创建对象有什么区别clone()?内存分配有什么区别吗?

4

5 回答 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 说:

此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。

这解释了我们婴儿列表的行为:引用被复制,而不是被引用的元素,因此我们的复制是“浅的”

内存分配当然可以不同:

  1. 您可以在构造函数中初始化字段
  2. 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 回答