Java 形参传递机制

形参细节补充

形参传递机制

如果前面的基本类型和引用类型学明白了,这一部分很简单。

  1. 在执行类方法的时候,JVM 会开辟临时栈,这个临时栈main栈是相互独立的,临时栈中无法获取到main栈中的任何变量,反过来也一样。
  2. 外界传入方法的实参,在执行的时候,相当于在临时栈中创建了一个变量,这个变量的名字就是形参名字,如果传入的是基本类型,则会将传入的实参进行值拷贝。如果传入的实参是引用类型,则会将这个变量指向这个引用类型的内存地址。
  3. 一旦方法内部的这个形参变量与这个引用类型断开,后续的任何操作都与外界传入的实参无关。例如:
    1. 传入的实参是一个数组,相当于在这个类方法创建了一个变量,变量名字就是这个形参的名字
    2. 并将这个变量指向这个实参的内存地址
    3. 现在我们断开与实参的引用 int 形参名字[] = {1, 2, 3}
    4. 这个操作相当于在堆空间中重新开辟一个新的数组,并将这个形参变量指向这个新的数组。我们就彻底和外部这个数组失联了,我们后续操作的都是我们新创建的这个数组,且因为栈与栈之间是独立的,我们也无法重新获取外界这个数组。

如果觉得上面不好理解可以看看下面这段代码

int array[] = {1, 2, 3};  // 假设下面是一个方法 int newArray[];  // 假设这是这个类方法的形参 // 假设现在执行的这个方法, // 并将array作为实参传递给了这个方法 newArray = array; // 我们在这个方法里创新定义了一个数组 newArray = {1, 3, 5, 6};  // 现在newArray与 array已经没有任何联系了 

上面这段代码只是为了更好理解形参的传递机制,并不是真正的传递机制,因为在执行成员方法的时候 JVM 会开辟新的栈空间,栈与栈之间是相互独立的,如果断开了与外界的联系,那么你在方法体内是无法获取任何main栈中的变量的。

如果上面这段代码还是没能看懂的还是建议回去把基础打好