在任何编程语言中都有深拷贝和浅拷贝的概念,Java无一例外
什么是深拷贝和浅拷贝?
首先需要明白,浅拷贝和深拷贝都是针对一个已有对象的操作。那先来看看浅拷贝和深拷贝的概念。
在 Java 中,除了基本数据类型(元类型)之外,还存在类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。
而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。
浅拷贝:
对基本数据类型进行值传递,在内存中创建一个新的对象,只不过对于对象的引用数据(Tips:String)进行引用传递般的拷贝,此为浅拷贝
深拷贝:
对基本数据类型进行值传递,在内存中创建一个新的对象,拷贝了源对象的所有值而不是地址
总结:
浅拷贝和深拷贝是相对的,如果一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作。
具体的实际Demo参考另一篇文章:https://editor.csdn.net/md/?articleId=107588760