在 Java 中,方法的值传递 是指将实参的值传递给方法的形参。Java 中只有 值传递,没有引用传递。具体来说:
-
对于 基本数据类型,传递的是值的副本。
-
对于 引用数据类型,传递的是引用的副本(即地址的副本)。
1. 基本数据类型的值传递
对于基本数据类型(如 int、double、char 等),方法传递的是值的副本。修改形参不会影响实参。
例子:
java
Copy
public class Main {
public static void main(String[] args) {
int a = 10;
System.out.println("调用方法前: a = " + a); // 输出 10
changeValue(a); // 传递 a 的值(10)的副本
System.out.println("调用方法后: a = " + a); // 输出 10(a 的值未改变)
}
public static void changeValue(int b) {
b = 20; // 修改形参 b 的值
System.out.println("方法内: b = " + b); // 输出 20
}
}
-
输出结果:
Copy
调用方法前: a = 10 方法内: b = 20 调用方法后: a = 10
-
解释:
-
a的值是10,调用changeValue(a)时,传递的是a的值的副本(即10)。 -
在方法内部修改
b的值不会影响a的值。
-
2. 引用数据类型的值传递
对于引用数据类型(如数组、对象等),方法传递的是引用的副本(即地址的副本)。修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。
例子:
java
Copy
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("调用方法前: arr[0] = " + arr[0]); // 输出 1
changeArray(arr); // 传递 arr 的引用的副本
System.out.println("调用方法后: arr[0] = " + arr[0]); // 输出 100
}
public static void changeArray(int[] brr) {
brr[0] = 100; // 修改形参指向的数组内容
System.out.println("方法内: brr[0] = " + brr[0]); // 输出 100
}
}
-
输出结果:
Copy
调用方法前: arr[0] = 1 方法内: brr[0] = 100 调用方法后: arr[0] = 100
-
解释:
-
arr是一个数组引用,调用changeArray(arr)时,传递的是arr的引用的副本(即地址的副本)。 -
brr和arr指向同一个数组对象,因此修改brr[0]会影响arr[0]。
-
3. 值传递的通俗比喻
-
基本数据类型:
-
就像你复印了一份文件(值的副本),修改复印件不会影响原件。
-
例如:
int a = 10;传递的是10的副本。
-
-
引用数据类型:
-
就像你复印了一张银行卡(引用的副本),银行卡指向同一个银行账户。
-
例如:
int[] arr = {1, 2, 3};传递的是数组引用的副本,但数组内容共享。
-
4. 总结
-
Java 中只有值传递:
-
对于基本数据类型,传递的是值的副本。
-
对于引用数据类型,传递的是引用的副本。
-
-
基本数据类型:修改形参不会影响实参。
-
引用数据类型:修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。



















