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

Java函数--参数传递的方式及其示例

发布时间:2023-12-10 03:38:00

Java中参数传递的方式有两种:值传递和引用传递。

1. 值传递:

值传递是指将参数值的副本传递给方法中的参数。在方法内部修改参数的值不会影响到原始变量的值。Java中的基本数据类型(byte、short、int、long、float、double、char、boolean)都是以值传递的方式进行参数传递。

示例1:基本数据类型的值传递

public class ValuePassing {
    public static void main(String[] args) {
        int num = 10;
        System.out.println("调用方法之前的num的值:" + num);
        changeValue(num);
        System.out.println("调用方法之后的num的值:" + num);
    }

    public static void changeValue(int n) {
        n = 20;
        System.out.println("方法内部修改后的n的值:" + n);
    }
}

在上述示例中,方法changeValue接受一个int类型的参数n,将参数n的值修改为20。但是在main方法中输出num的值时,发现num的值并没有被改变。

2. 引用传递:

引用传递是指将参数的引用(内存地址)传递给方法中的参数,方法中的参数和传递进来的参数指向同一块内存地址。在方法内部修改参数的值会影响到原始变量的值。Java中的数组、字符串和对象都是以引用传递的方式进行参数传递。

示例2:引用类型的引用传递

public class ReferencePassing {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("调用方法之前的arr数组:" + Arrays.toString(arr));
        changeArray(arr);
        System.out.println("调用方法之后的arr数组:" + Arrays.toString(arr));
    }

    public static void changeArray(int[] array) {
        array[0] = 10;
        array[1] = 20;
        array[2] = 30;
        System.out.println("方法内部修改后的array数组:" + Arrays.toString(array));
    }
}

在上述示例中,方法changeArray接受一个int类型的一维数组参数array,将数组的前三个元素修改为10、20和30。在main方法中输出arr数组的值时,发现arr数组的值也发生了变化。

再举一个示例,演示字符串的引用传递:

public class ReferencePassing {
    public static void main(String[] args) {
        String str = "Hello";
        System.out.println("调用方法之前的str字符串:" + str);
        changeString(str);
        System.out.println("调用方法之后的str字符串:" + str);
    }

    public static void changeString(String s) {
        s = "World";
        System.out.println("方法内部修改后的s字符串:" + s);
    }
}

在上述示例中,方法changeString接受一个String类型的参数s,将参数s的值修改为"World"。但是在main方法中输出str的值时,发现str的值并没有被改变。

需要注意的是,虽然参数传递方式有值传递和引用传递之分,但Java中的一些数据类型(例如String)在使用时更像是值传递,虽然传的是引用,但对它的修改并不会改变原始变量的值。这是因为String是不可变的(immutable)对象,当对String对象进行修改时,实际上是创建了一个新的String对象。