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

Java函数参数传递方式有哪些

发布时间:2023-05-20 10:15:23

Java函数参数传递有按值传递和按引用传递两种方式。

按值传递是指将参数的值复制一份,传递给函数,在函数内部对参数值的操作不会影响原始变量的值。这种方式通常用于传递基本数据类型的参数。例如:

public class Test {
    public static void main(String[] args) {
        int a = 5;
        changeValue(a);
        System.out.println(a); // 输出结果为5,未改变a的值
    }
    public static void changeValue(int num) {
        num = 10; // 修改num的值
    }
}

按引用传递是指将参数的引用复制一份,传递给函数,在函数内部对参数的操作会影响原始变量的值。这种方式通常用于传递对象类型的参数。例如:

public class Test {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("hello");
        changeValue(sb);
        System.out.println(sb.toString()); // 输出结果为world,修改了原来对象的值
    }
    public static void changeValue(StringBuilder str) {
        str.append("world"); // 修改str的值
    }
}

需要注意的是,在Java中,数组类型也是引用类型。因此,对数组类型的参数进行操作同样会影响原始数组的值。例如:

public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        changeValue(arr);
        System.out.println(Arrays.toString(arr)); // 输出结果为[2, 3, 4],修改了原来数组的值
    }
    public static void changeValue(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] += 1; // 修改arr的值
        }
    }
}

除了按值传递和按引用传递,Java还有一种特殊的传递方式:可变参数传递。它允许函数接收任意个数的参数,并将这些参数打包为一个数组传递给函数。在函数内部操作数组的方法与操作普通数组一致。例如:

public class Test {
    public static void main(String[] args) {
        int sum = sum(1, 2, 3, 4, 5);
        System.out.println(sum); // 输出结果为15
    }
    public static int sum(int... nums) {
        int total = 0;
        for (int num : nums) {
            total += num;
        }
        return total;
    }
}

总之,Java函数参数传递方式有按值传递、按引用传递和可变参数传递三种。不同的传递方式适用于不同的场景,需要根据实际情况进行选择。