方法的实参和形参

一、实参(Actual Parameters)
  1. 定义:实参是在调用方法时传递给方法的实际值或对象的引用。
  2. 位置:实参位于方法调用语句中。
  3. 作用:实参用于传递数据给方法内部使用。
  4. 类型:实参可以是基本数据类型(如int、double等)或对象引用。
  5. 数量:调用方法时提供的实参数量必须与方法定义中的形参数量一致。

实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。

二、形参(Formal Parameters)
  1. 定义:形参是在方法定义中用于接收传入值的变量。
  2. 位置:形参位于方法的括号内,是方法签名的一部分。
  3. 作用:形参作为方法内部的局部变量,用于存储传入的实参值。
  4. 类型:形参具有特定的数据类型,可以是任何有效的Java类型。
  5. 数量:方法定义中的形参数量决定了调用时需要提供实参的数量

形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。

实例:
// 方法定义
public void printSum(int num1, int num2) {
    // num1 和 num2 是形参
    int sum = num1 + num2;
    System.out.println("The sum is: " + sum);
}

// 方法调用
printSum(5, 10); // 5 和 10 是实参
注意:
  • 在值传递调用过程中,只能把实参传递给形参,而不能把形参的值反向作用到实参上。在函数调用过程中,形参的值发生改变,而实参的值不会发生改变。
  • 而在引用传递调用的机制中,实际上是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。
  • 实参和形参的类型必须匹配或兼容。
  • 实参可以是常量、变量、表达式或任何产生所需类型值的结果。
  • 方法重载时,可以通过改变形参的数量或类型来定义多个同名方法
三、在Java中,方法参数的传递主要分为两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。
1.值传递(Pass by Value)
  1. 基本数据类型:对于Java的8种基本数据类型(int, double, float, boolean, char, byte, short, long),方法参数传递是通过值传递的。这意味着当一个基本数据类型的变量作为参数传递给方法时,实际上是传递了这个变量的值的副本。

  2. 行为:在方法内部对参数的修改不会影响到原始变量的值。

  • 示例(值传递):
void increment(int value) {
    value++;
}

int main() {
    int a = 10;
    increment(a);
    System.out.println(a); // 输出 10,increment 方法中的修改不影响 a 的值
    return 0;
}
引用传递(Pass by Reference)
  1. 对象引用:对于对象(引用数据类型),方法参数传递的也是引用的值,即对象在内存中的地址。但Java实际上是通过值传递这个引用的副本。

  2. 行为

    • 方法内部可以通过这个引用访问和修改对象的状态(对象的字段)。
    • 方法内部不能修改引用本身的值,即不能将这个引用指向一个新的对象。
  • 示例(引用传递):
void changeContent(String[] array, int index, String newValue) {
    array[index] = newValue; // 可以修改对象的状态(数组的内容)
}

int main() {
    String[] myArray = {"Hello", "World"};
    changeContent(myArray, 1, "Java");
    System.out.println(myArray[1]); // 输出 "Java",数组内容被修改

    // 尝试修改引用本身
    changeContent(myArray, 1, new String("New Java"));
    System.out.println(myArray[1]); // 仍然输出 "Java",引用本身未被修改
    return 0;
}
重要区别
  • 值的修改:基本数据类型的参数在方法内部的修改不会影响到原始值。对象引用的参数在方法内部可以修改对象的状态,但不能修改引用本身指向。

  • 内存地址:基本数据类型的参数不会传递内存地址。对象引用的参数传递的是对象在内存中的地址的副本。

    方法的实参和形参的区别:
    特性 实参 形参
    定义 方法调用时实际传递的值 方法定义时的参数变量
    位置 出现在方法调用语句中 出现在方法的参数列表中
    作用 向方法提供具体的数据或引用 接收方法调用时传递的数据或引用
    访问 直接访问实参值或对象引用 通过形参变量访问
    作用域 调用结束后生命周期结束 仅限于方法内部
    与对象的关系 可以是对象的属性或对象本身 作为局部变量,不直接与对象实例关联
    个数要求 必须与形参数量一致 定义时确定
    初始值 由调用者在调用时赋值 由方法接收实参的值进行初始化
    修改影响 实参本身不会被方法内的修改影响 形参的修改不会影响到实参(基本数据类型)
    引用传递 对象引用的实参可以影响对象本身 形参是对象引用的副本,不能重新赋值指向其他对象