📜  Java中如何传递参数?(1)

📅  最后修改于: 2023-12-03 15:31:49.315000             🧑  作者: Mango

Java中如何传递参数?

在Java中,参数传递有两种方式:值传递和引用传递。值传递是指将一个变量的值复制给另一个变量,两者之间互不影响。引用传递是指将一个对象的引用(地址值)传递给另一个变量,在传递过程中,两个变量指向同一个对象,因此对其中一个变量的修改会影响另一个变量。

值传递

在Java中,基本数据类型(byte、short、int、long、float、double、char、boolean)都采用值传递的方式传递参数。在值传递中,形式参数(函数定义的参数)和实际参数(调用函数时传递的参数)都是一份独立的数据,它们之间互不影响。

下面是一个例子:

public class Test {
    public static void main(String[] args) {
        int a = 10;
        change(a);
        System.out.println(a);
    }
    
    public static void change(int x) {
        x = 20;
    }
}

输出结果为10。在change方法中,x是形式参数,它的初始值为10,然后将它的值修改为20。但是,在main方法中,变量a的值并没有改变,因为change方法中的修改只是修改了形式参数x的值,不会影响实际参数a的值。

引用传递

在Java中,除了基本数据类型之外,其他所有的数据类型(数组、对象等)都采用引用传递的方式传递参数。在引用传递中,形式参数和实际参数都指向同一个对象,在函数内部对形式参数的修改会影响到实际参数的值。

下面是一个例子:

public class Test {
    public static void main(String[] args) {
        int[] array = {1, 2, 3};
        change(array);
        System.out.println(array[0]);
    }
    
    public static void change(int[] x) {
        x[0] = 10;
    }
}

输出结果为10。在change方法中,x是形式参数,它的初始值为实际参数array所指向的数组{1, 2, 3}的地址值。然后将数组的第一个元素修改为10。由于形式参数和实际参数都指向同一个数组,因此在main方法中,输出array[0]的值为10。

需要注意的是,在引用传递中,如果在函数内部将形式参数重新赋值为新的对象,那么这个新的对象只会在函数内部生效,对实际参数没有影响。

下面是一个例子:

public class Test {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};
        change(array1, array2);
        System.out.println(array1[0] + " " + array2[0]);
    }
    
    public static void change(int[] x, int[] y) {
        x = y;
        y[0] = 10;
    }
}

输出结果为1 10。在change方法中,将形式参数x重新赋值为y,即将x指向的数组改为y指向的数组。然后将y的第一个元素修改为10。但是,由于重新赋值只是让x指向了一个新的数组,因此对实际参数array1没有影响,仍然指向原来的数组{1, 2, 3}。因此输出array1[0]的值为1,而输出array2[0]的值为10。