010.参数的值传递机制

1. 基本数据类型的传递机制-值传递

010.参数的值传递机制

  • 在方法被调用时, 实参通过形参把它的内容副本传入方法内部,
    此时形参接收到的内容是实参值的一个拷贝,
    因此在方法内对形参的任何操作, 都仅仅是对这个副本的操作,
    不影响原始值的内容.

  • 实际上实参传递给形参的时候, 形参作为方法内部的变量,
    会在栈里面重新开辟空间用来存储实参传递过来的值,
    相当于在栈中有第二个和实参内容一样的空间, 但地址不同.
    因此对形参的操作不会影响到实参,
    形参在方法结束后其在栈中开辟的空间会被自动清理掉.

2. 引用数据类型的传递机制-引用传递

010.参数的值传递机制

  • "引用"也就是指向真实内容的地址值, 在方法调用时,
    实参的地址通过方法调用被传递给相应的形参,
    在方法体内形参和实参指向同一块内存地址,
    对形参的操作会影响的真实内容.

  • 实际上, 引用传值也只是值传递, 具体流程和值传递类似,
    因为实参给形参传递的是引用数据所在的堆空间的地址,
    引用数据类型的存储都是在堆上进行分配和管理,
    且引用值是通过堆空间地址的映射才能找到,
    因此, 实参和形参虽然在栈空间中都开辟了空间且地址不一样,
    但它们在栈中存储的指向的堆空间的地址却完全相同,
    所以, 实参和形参都是指向同一块堆空间,
    对形参值进行改变也会影响到实参值.
    方法结束后删除形参的栈空间失去对堆空间的映射.