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啊?
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啊?
copy引用original引用的对象