Java 中的参数传递是 按值传递,但对于引用类型,传递的是 引用值的副本。
解释:
-
基本数据类型(primitive types):例如
int
、double
、char
等,在方法调用时,传递的是变量的值的副本。这意味着方法内部对参数的修改不会影响到方法外部的原始变量。 -
引用类型(reference types):例如
String
、Array
、Object
等,在方法调用时,传递的是引用变量的值的副本。这个副本指向的是同一个对象,所以方法内部对参数的修改会影响到方法外部的原始对象。
示例:
public class Main {
public static void main(String[] args) {
int num = 10;
changeNum(num);
System.out.println("num: " + num); // 输出:10
String str = "Hello";
changeStr(str);
System.out.println("str: " + str); // 输出:Hello World
}
public static void changeNum(int num) {
num = 20;
}
public static void changeStr(String str) {
str = str + " World";
}
}
解释:
- 在
changeNum
方法中,num
是int
类型,传递的是其值的副本,所以方法内部的修改不会影响到main
方法中的num
。 - 在
changeStr
方法中,str
是String
类型,传递的是其引用值的副本,这个副本指向同一个String
对象。方法内部修改了str
的值,实际上是修改了同一个String
对象,所以main
方法中的str
也被改变了。
总结:
Java 中的参数传递是按值传递,但对于引用类型,传递的是引用值的副本,这个副本指向同一个对象。因此,方法内部对引用类型参数的修改会影响到方法外部的原始对象。