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

深入理解Java方法的参数传递

发布时间:2023-06-06 15:11:42

Java中的方法参数传递可以分为值传递和引用传递。值传递是指将实参的表达式值复制给形参,因此在方法内部对形参的修改不会影响实参。而引用传递则是将实参的引用复制给形参,因此在方法内部对形参的修改会影响实参指向的对象。

对于基本数据类型,如int、double等,采用的是值传递。例如:

public static void main(String[] args) {
    int a = 1;
    changeValue(a);
    System.out.println("a = " + a); //输出a = 1
}

public static void changeValue(int b) {
    b = 2;
}

在这个例子中,调用changeValue(a)时,实参a的值1被复制给了形参b。在changeValue方法内部修改b的值为2,但这并不会影响实参a的值,最终输出为a = 1。

而对于引用类型,如数组、对象等,采用的是引用传递。例如:

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    changeValue(array);
    System.out.println(Arrays.toString(array)); //输出[2, 4, 6]
}

public static void changeValue(int[] array) {
    for (int i = 0; i < array.length; i++) {
        array[i] = array[i] * 2;
    }
}

在这个例子中,调用changeValue(array)时,实参array的引用被复制给了形参array。在changeValue方法内部通过遍历数组修改其值,最终输出为[2, 4, 6]。

需要注意的是,虽然引用传递可以修改实参指向的对象,但如果在方法内部重新给形参赋值,则该形参只是一个局部变量,不会再指向实参指向的对象。例如:

public static void main(String[] args) {
    int[] array = {1, 2, 3};
    changeValue(array);
    System.out.println(Arrays.toString(array)); //输出[1, 2, 3]
}

public static void changeValue(int[] array) {
    array = new int[] {4, 5, 6};
}

在这个例子中,虽然调用changeValue(array)时实参array被引用传递给了形参array,但在方法内部重新为形参array赋值了一个新的数组,这个数组和实参array指向的不是同一个对象。因此最终输出为[1, 2, 3]。

总结来说,Java方法的参数传递方式取决于参数的类型。对于基本数据类型采用值传递,而对于引用类型采用引用传递。需要注意的是,虽然引用传递可以修改实参指向的对象,但在方法内部重新为形参赋值时需要注意该形参只是一个局部变量。