欢迎访问宙启技术站
智能推送

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的引用。