Java中的克隆值的是对象的克隆,是指在堆空间中复制一块儿内存,是完全相同的两个对象。需要通过实现接口Cloneable或者是通过序列化等方式来实现。
假克隆是指对象的赋值,仅仅代表指针指向的改变,而不会创建新的内存单元。如下:
Employee employee1 = new Employee();// 创建Employee对象employee1
Employee employee2 = employee1; // 将employee1赋值给employee2
而浅克隆是指在在克隆的过程中,仅仅克隆对象的基本数据类型。而对于对象内部的嵌套对象,也称为引用类型,则不能实现克隆。比如说,首先定义一个地址类:
public class Address {}
然后在定义一个实现了cloneable接口的employee类,在employee类中实现了对address类的引用:
public class Employee implements Cloneable {}
最后再进行对象创建:
Address address = new Address("中国", "吉林", "长春");// 创建address对象
Employee employee1 = new Employee("张XX", 30, address);// 创建employee1对象
Employee employee2 = employee1.clone();// 使用克隆创建employee2对象
此时就实现了浅克隆。
深度克隆是指在克隆的过程中,不仅实现克隆对象的基本数据类型,而且对于其引用类型也可以克隆。如下,首先定义一个地址类,这个类实现了接口cloneable,
public class Address implements Cloneable {}
其次定义一个employee类,同样的实现了cloneable接口,同时在employee类中实现了对address类的引用。
public class Employee implements Cloneable {} 最受进行对象创建:
Address address = new Address("中国", "吉林", "长春");// 创建address对象
Employee employee1 = new Employee("张XX", 30, address);// 创建employee1对象
Employee employee2 = employee1.clone();// 使用克隆创建employee2对象 此时就实现了深度克隆。