java 方法如何传递
方法参数传递机制
在Java中,方法参数的传递方式分为两种:值传递(Pass by Value)和引用传递(Pass by Reference)。但严格来说,Java仅支持值传递,即使是对象类型,传递的也是引用的副本。
基本数据类型的值传递
基本数据类型(如int、double、char等)在方法调用时,传递的是实际值的副本。方法内部对参数的修改不会影响原始变量。
public class Main {
public static void modifyValue(int num) {
num = 20;
}
public static void main(String[] args) {
int x = 10;
modifyValue(x);
System.out.println(x); // 输出 10(未改变)
}
}
对象类型的引用传递(值传递的引用副本)
对象类型(如数组、类实例)传递的是引用的副本,方法内部可以通过引用修改对象的属性,但重新赋值不会影响原始引用。
public class Main {
static void modifyArray(int[] arr) {
arr[0] = 99; // 修改数组元素会影响原始对象
arr = new int[]{100, 200}; // 重新赋值不影响原始引用
}
public static void main(String[] args) {
int[] myArray = {1, 2, 3};
modifyArray(myArray);
System.out.println(myArray[0]); // 输出 99
}
}
不可变对象(如String)的特殊情况
String等不可变对象在方法内重新赋值时,会创建新对象,原始引用不受影响。
public class Main {
static void modifyString(String str) {
str = "New Value"; // 不影响原始引用
}
public static void main(String[] args) {
String s = "Original";
modifyString(s);
System.out.println(s); // 输出 "Original"
}
}
总结
- 基本类型:传递值的副本,方法内修改不影响原始变量。
- 对象类型:传递引用的副本,方法内可修改对象属性,但重新赋值不影响原始引用。
- 不可变对象(如
String):重新赋值会创建新对象,原始引用不变。







