在Java中,除了基本数据类型之外,还存在类的实例对象这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值;但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用(内存地址)传递过去,他们实际还是指向的同一个对象。
而浅拷贝和深拷贝就是在这个基础上做的区分。如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行引用(内存地址)的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。
简单来说:
- 浅拷贝:对基本数据类型采用值传递,对引用数据类型采用引用传递的拷贝,为浅拷贝。
- 深拷贝: 对基本数据类型采用值传递,对引用数据类型的拷贝,是创建一个新的对象,并复制其内容,为深拷贝。