Java中有两种类型变量,值类型和引用类型。
对于值类型:copy是属于全盘复制,也就是深拷贝
对于引用类型:一般的copy只是浅拷贝,相当于传递一个引用指针一样。
而当引用类型进行深拷贝的时候必须实现Cloneable接口中提供的Clone方法。
通俗的说:
深拷贝:不仅复制对象的基本类型,还复制原来对象中的对象,完全产生一个新的对象。
浅拷贝:只是赋值对象的基本类型,对象还是属于原来的引用。如果是值类型直接拷贝到新的对象,引用类型则是复制一个引用到目标对象而已。
在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存而已。
深拷贝不但增加了一个指针还申请了一个新的内存,让这个增加的指针指向新的内存。所以当采用深拷贝释放内存的时候不会出现重复释放同一个内存的错误。
浅拷贝代码如下:
1 | public class Teacher implements Cloneable{ |
深拷贝代码如下:
1 | public class Teacher implements Cloneable{ |