Core Java里有这样一段代码:
public static void main(String[] args)
{
Employee original = new Employee("John Q. Public", 50000);
original.setHireDay(2000, 1, 1);

Employee copy = (Employee)original.clone();    //(1)
copy.raiseSalary(10);
copy.setHireDay(2002, 12, 31);

System.out.println("original = " + original);
System.out.println("copy = " + copy);
}// Employee里clone()的实现
public Object clone()
{
try
{
// call Object.clone()
Employee cloned = (Employee)super.clone();
// clone mutable fields
cloned.hireDay = (Date)hireDay.clone();

return cloned;
}
catch(CloneNotSupportedException e)
{
return null;
}
}

在(1)这里,copy应该是作为一个引用创建的吧?没有用new,为什么JVM会给它在内存里分配另一块空间呢?而Employee里的clone()实现也没有用new啊?

解决方案 »

  1.   

    因为在Object中已经实现了一个clone方法,这个返回的对象已经是一个新的对象了所以不需要new,只需要super.clone();就行它这里的作用就是将所有的数据对象再复制一次以达到深度Clone
      

  2.   

    是的,clone()实现的确不用new啊.你只要实现Cloneable()接口即可.
    copy引用original引用的对象