010.参数的值传递机制
1. 基本数据类型的传递机制-值传递
-
在方法被调用时, 实参通过形参把它的内容副本传入方法内部,
此时形参接收到的内容是实参值的一个拷贝,
因此在方法内对形参的任何操作, 都仅仅是对这个副本的操作,
不影响原始值的内容. -
实际上实参传递给形参的时候, 形参作为方法内部的变量,
会在栈里面重新开辟空间用来存储实参传递过来的值,
相当于在栈中有第二个和实参内容一样的空间, 但地址不同.
因此对形参的操作不会影响到实参,
形参在方法结束后其在栈中开辟的空间会被自动清理掉.
2. 引用数据类型的传递机制-引用传递
-
"引用"也就是指向真实内容的地址值, 在方法调用时,
实参的地址通过方法调用被传递给相应的形参,
在方法体内形参和实参指向同一块内存地址,
对形参的操作会影响的真实内容. -
实际上, 引用传值也只是值传递, 具体流程和值传递类似,
因为实参给形参传递的是引用数据所在的堆空间的地址,
引用数据类型的存储都是在堆上进行分配和管理,
且引用值是通过堆空间地址的映射才能找到,
因此, 实参和形参虽然在栈空间中都开辟了空间且地址不一样,
但它们在栈中存储的指向的堆空间的地址却完全相同,
所以, 实参和形参都是指向同一块堆空间,
对形参值进行改变也会影响到实参值.
方法结束后删除形参的栈空间失去对堆空间的映射.