对象克隆

来源:互联网 发布:我国农产品出口数据 编辑:程序博客网 时间:2024/06/05 05:17
 Employee original=new Employee("John Public",50000); Employee copy=original; copy.raiseSalary(10); // original changed Employee copy=original.clone(); copy.raiseSalary(10);// original unchanged

拷贝和克隆


  • 默认的克隆操作是“浅拷贝”,并没有在克隆对象中引用其他的对象。
  • 如果原对象和浅克隆对象共享的子对象是不可变的,那么共享就是安全的。
  • 如果子对象是可变的,从新定义clone方法来建立一个深拷贝。
    创建深拷贝的clone方法:
public class Employee implements Cloneable{    public Employee clone() throws CloneNotSupportedException{        Employee cloned=(Employee) super.clone();        // clone mutable fields        cloned.hireDay=(Date) hireDay.clone();        return cloned;    }    }

数组克隆例子:

            int[] luckNumbers={1,2,3,4,5,6};            int[] cloned=luckNumbers.clone();            cloned[5]=11;// 不改变luckNumbers[5]的值