方法的实参和形参
一、实参(Actual Parameters)
- 定义:实参是在调用方法时传递给方法的实际值或对象的引用。
- 位置:实参位于方法调用语句中。
- 作用:实参用于传递数据给方法内部使用。
- 类型:实参可以是基本数据类型(如int、double等)或对象引用。
- 数量:调用方法时提供的实参数量必须与方法定义中的形参数量一致。
实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。
二、形参(Formal Parameters)
- 定义:形参是在方法定义中用于接收传入值的变量。
- 位置:形参位于方法的括号内,是方法签名的一部分。
- 作用:形参作为方法内部的局部变量,用于存储传入的实参值。
- 类型:形参具有特定的数据类型,可以是任何有效的Java类型。
- 数量:方法定义中的形参数量决定了调用时需要提供实参的数量
形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。
实例:
// 方法定义
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)
-
基本数据类型:对于Java的8种基本数据类型(int, double, float, boolean, char, byte, short, long),方法参数传递是通过值传递的。这意味着当一个基本数据类型的变量作为参数传递给方法时,实际上是传递了这个变量的值的副本。
-
行为:在方法内部对参数的修改不会影响到原始变量的值。
-
示例(值传递):
void increment(int value) {
value++;
}
int main() {
int a = 10;
increment(a);
System.out.println(a); // 输出 10,increment 方法中的修改不影响 a 的值
return 0;
}
引用传递(Pass by Reference)
-
对象引用:对于对象(引用数据类型),方法参数传递的也是引用的值,即对象在内存中的地址。但Java实际上是通过值传递这个引用的副本。
-
行为:
- 方法内部可以通过这个引用访问和修改对象的状态(对象的字段)。
- 方法内部不能修改引用本身的值,即不能将这个引用指向一个新的对象。
-
示例(引用传递):
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;
}
重要区别
-
值的修改:基本数据类型的参数在方法内部的修改不会影响到原始值。对象引用的参数在方法内部可以修改对象的状态,但不能修改引用本身指向。
-
内存地址:基本数据类型的参数不会传递内存地址。对象引用的参数传递的是对象在内存中的地址的副本。
方法的实参和形参的区别:
特性 实参 形参 定义 方法调用时实际传递的值 方法定义时的参数变量 位置 出现在方法调用语句中 出现在方法的参数列表中 作用 向方法提供具体的数据或引用 接收方法调用时传递的数据或引用 访问 直接访问实参值或对象引用 通过形参变量访问 作用域 调用结束后生命周期结束 仅限于方法内部 与对象的关系 可以是对象的属性或对象本身 作为局部变量,不直接与对象实例关联 个数要求 必须与形参数量一致 定义时确定 初始值 由调用者在调用时赋值 由方法接收实参的值进行初始化 修改影响 实参本身不会被方法内的修改影响 形参的修改不会影响到实参(基本数据类型) 引用传递 对象引用的实参可以影响对象本身 形参是对象引用的副本,不能重新赋值指向其他对象
浙公网安备 33010602011771号