Java函数中传参的不同方式
发布时间:2023-06-30 11:24:35
在Java函数中,传参的方式可以分为按值传递和按引用传递两种不同的方式。下面分别进行详细说明。
1. 按值传递:
按值传递是指将参数的值复制一份传递给函数的形参,函数内对形参的修改不会影响到原始的参数。Java中的基本数据类型(如int、float、char等)都是按值传递的方式进行参数传递。
例如:
public void manipulateValue(int value) {
value = value + 1; // 修改形参的值
System.out.println("形参值:" + value);
}
public static void main(String[] args) {
int num = 10;
manipulateValue(num); // 传递实参
System.out.println("实参值:" + num);
}
运行结果:
形参值:11
实参值:10
可以看到,函数内对形参value的修改不会影响到外部的实参num的值。
2. 按引用传递:
按引用传递是指将参数的引用(内存地址)传递给函数的形参,这样函数内对形参的修改会直接影响到原始的参数。Java中的对象类型(如数组、字符串、自定义对象等)都是按引用传递的方式进行参数传递。
例如:
public void manipulateArray(int[] array) {
array[0] = 100; // 修改形参数组的 个元素
System.out.println("形参数组 个元素:" + array[0]);
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
manipulateArray(arr); // 传递实参
System.out.println("实参数组 个元素:" + arr[0]);
}
运行结果:
形参数组 个元素:100
实参数组 个元素:100
可以看到,函数内对形参array数组的修改直接影响到了外部的实参arr数组的值。
需要注意的是,虽然对象类型是按引用传递的方式进行参数传递,但是对于函数内重新给形参对象赋值的情况,这个赋值操作只会影响形参的引用,不会影响原始实参的引用。
例如:
public void changeReference(StringBuilder str) {
str = new StringBuilder("Hello, world!");
System.out.println("形参引用:" + str.toString());
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
changeReference(sb); // 传递实参
System.out.println("实参引用:" + sb.toString());
}
运行结果:
形参引用:Hello, world!
实参引用:Hello
可以看到,虽然函数内对形参str进行了重新赋值,但是并没有影响到外部实参sb的引用。
