在 Java 中,参数传递也可以是值传递(pass by value)或引用传递(pass by reference)。
- 值传递(pass by value):
在值传递中,函数或方法接收的是原始数据类型或对象引用的副本,对参数进行修改不会影响原始变量的值。
public static void modifyValue(int num) { num = 42; }
int value = 10; modifyValue(value);
// value 的值仍然是 10,没有改变
在上述示例中,modifyValue() 方法接收一个整数参数 num,并将其修改为 42。然而,在方法调用后,原始变量 value 的值仍然是 10,因为方法内部的修改只作用于参数的副本。
- 引用传递(pass by reference):
在引用传递中,函数或方法接收的是对象引用的副本,但指向相同的对象。对参数的修改会直接影响原始对象的值。
public static void modifyReference(StringBuilder str) {
str.append("World");
}
StringBuilder sb = new StringBuilder("Hello");
modifyReference(sb);
// sb 的值现在是 "HelloWorld",被修改了
在上述示例中,modifyReference() 方法接收一个 StringBuilder 对象引用作为参数,并追加字符串 "World"。在方法调用后,原始对象 sb 的值变为 "HelloWorld",因为方法直接修改了原始对象的值。
需要注意的是,在 Java 中,不像一些其他语言那样提供显式的引用传递。即使在引用传递的情况下,仍然是将引用的副本传递给方法或函数,但可以通过操作引用指向的对象来实现对原始对象的修改。这就是为什么 Java 被认为是按值传递的语言,无论是传递原始数据类型还是引用数据类型。