希望通过博客和大家相互交流,相互学习,如有错误,请评论区指正
首先来看看之前在拷贝数组时用到的clone()方法
import java.util.Arrays;
public class CloneableDemo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
int[] arr2 = arr.clone();
arr2[0] = 666;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arr2));
}
}
运行结果:
在这个过程中,通过arr2来修改第一个下标的值,对arr里面的数值并未产生影响,可以看到通过clone()方法也实现了对数组的拷贝,但其实clone()方法是一个浅拷贝
浅拷贝
例如arr里面放的是引用类型
如果arr里面放的是引用类型的话,那么通过clone()方法只拷贝了对象的引用,并未拷贝对象,造成藕断丝连的情况,只是浅拷贝
而我们想要达到的效果应该是下图这样的深拷贝
深拷贝
如果想用clone()方法克隆自定义类型,就需要实现接口
实现接口
但是当我们去实现Cloneable接口时,却发现Cloneable接口是一个空接口
为什么是空接口
Cloneable接口在源码当中是没有抽象方法的
空接口:也把它叫做标记接口,只要一个类实现了这个接口,那么就标记这个类是可以进行clone的,然后在这个类中重写clone方法就行了