浅拷贝(副本)与深拷贝
首先我们来看浅拷贝,其实是将一个对象的引用值赋值给另外一个变量使两个变量同时指向一个对象。
例如:People p1=new People();//我们称p1为People对象的引用
People p1=p1;//我们称p2为p1的副本
整个过程就是一个浅拷贝,把p1赋值给p2,实际上并没用把p1对应的资源备份一份给p2,只是让p2与p1的指向相同,如图:
这样对p1或者p2操作都可能改变Peopled的内容,java中对象作为实参传递时采用的就是这种方式
深拷贝:将p1对应的资源备份,再让p2指向该资源,如下图
这样p1和p2就没有什么关系,操作p1只能修改它所指向资源的内容,相同的操作p2也只能修改p2所指向的资源
注意:引用类型数据作为实参传递给形参时就是一种浅拷贝
而基本数据类型作为实参传递时传递的不是它的引用,传递的是它自身的值,类似于深拷贝。
所以引用传递可能会导致实参的改变,而基本数据类型传递(值传递)不会引起实参的改变。