Java函数参数传递详解:值传递和引用传递
发布时间:2023-06-26 17:00:05
在 Java 中,函数参数的传递方式可以分为两种:值传递和引用传递。它们的区别在于传递的是实参的值还是其地址。
1. 值传递
值传递是指在调用函数时,将实参的副本传递给函数,形参对其进行操作不会影响到原始数据。例如:
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args) {
int x = 5, y = 10;
swap(x, y);
System.out.println("x = " + x + ", y = " + y);
}
在这个例子中,我们定义了一个 swap 函数,用于交换两个整数的值。接着在 main 函数中,我们定义了两个整数 x 和 y,将它们传递给 swap 函数,用于交换它们的值。但是,最终输出的结果是 x = 5, y = 10,也就是说,它们的值并没有被成功交换。这是因为在 swap 函数中,a 和 b 是形参,它们只是实参的副本,对它们进行操作不会影响到原始数据。
需要注意的是,对于基本数据类型(如 int、double 等),Java 中默认采用值传递的方式。
2. 引用传递
引用传递是指在调用函数时,将实参的地址传递给函数,形参可以通过地址(或者说引用)修改原始数据。例如:
public static void change(StringBuilder s) {
s.append(" World");
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
change(sb);
System.out.println(sb); // 输出 Hello World
}
在这个例子中,我们定义了一个 change 函数,它接受一个 StringBuilder 对象作为参数,并在其后面添加一段字符串。接着在 main 函数中,我们定义了一个 StringBuilder 对象 sb,并将其传递给 change 函数。最终输出的结果是 Hello World,也就是说,change 函数成功地修改了 sb 对象的值。
需要注意的是,对于引用数据类型(如数组、字符串、集合等),Java 中默认采用引用传递的方式。
总结一下,值传递和引用传递的区别在于传递的是实参的副本还是其地址。对于基本数据类型,默认采用值传递的方式;对于引用数据类型,默认采用引用传递的方式。在实际编程中,需要根据具体情况选择合适的传递方式。
