使用new关键字创建对象和使用clone方法之间的区别

时间:2012-11-03 04:59:40

标签: java

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

5 个答案:

答案 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说:

  

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

解释了我们宝宝列表的行为:复制了引用,而不是引用的元素,因此我们的副本是“浅”

内存分配当然可以有所不同:

  1. 您可以在构造函数中初始化字段
  2. clone可以初始化字段,即数组

答案 2 :(得分:1)

简单说明,

  

new创建一个实例

,而

  

clone返回实例的克隆。

答案 3 :(得分:1)

Clone()创建同一个类的新实例,并将所有字段复制到新实例并返回它(浅层复制)。

new 关键字是创建对象(http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html)的Java运算符。

答案 4 :(得分:0)

    按照默认构造函数
  • new()构造对象。
  • clone()进行引用的浅表复制。

仅当创建对象的成本很高时,才应使用克隆,而我们宁愿克隆并设置行为。