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

Java中关于函数的参数传递方式

发布时间:2023-11-26 19:57:57

在Java中,函数的参数传递方式分为值传递和引用传递。

1. 值传递:值传递是指将参数的值复制给一个新的变量,然后将这个新的变量传递给函数。在函数内部修改这个参数的值不会影响原来的变量。

例如:

public class Main {
    public static void main(String[] args) {
        int x = 5;
        changeValue(x);
        System.out.println("x = " + x);  // 输出 x = 5
    }
    
    public static void changeValue(int value) {
        value = value + 10;
    }
}

在上面的例子中,虽然在changeValue方法中修改了value的值,但是这个修改不会影响到main方法中的变量x

2. 引用传递:引用传递是指将参数的引用传递给函数,函数内部可以通过这个引用来修改参数的值。引用传递的本质是传递了变量的地址。

例如:

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        changeArray(arr);
        System.out.println("arr[0] = " + arr[0]);  // 输出 arr[0] = 10
    }
    
    public static void changeArray(int[] array) {
        array[0] = 10;
    }
}

在上面的例子中,main方法中的数组arr的地址被传递给了changeArray方法,changeArray方法通过这个地址修改了数组的值,所以在main方法中打印时,数组的值已经被修改为10。

需要注意的是,虽然在Java中通过引用传递可以修改参数的值,但是无法更改传入对象的引用本身。也就是说,如果在函数内部重新给参数赋值(创建一个新的对象)是不会改变原来的变量。

例如:

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        changeReference(sb);
        System.out.println(sb.toString());  // 输出 Hello
    }
    
    public static void changeReference(StringBuilder s) {
        s = new StringBuilder("World");
    }
}

在上面的例子中,虽然在changeReference方法中重新给s赋值了一个新的StringBuilder对象,但是这个改变并不会影响原来的变量sb,所以在main方法中打印时,仍然是原来的值。

综上所述,Java中函数的参数传递方式有值传递和引用传递两种,值传递是复制参数的值传递给函数,引用传递是传递变量的地址。无论是值传递还是引用传递,在函数内部修改参数的值不会影响原来的变量,但是引用传递可以通过引用来修改对象的值。