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

Java函数中参数传递的方式和区别

发布时间:2023-11-22 14:20:00

在Java中,参数传递的方式主要有值传递和引用传递两种。这两种方式有着明显的区别,下面将对它们进行详细的介绍。

## 值传递

值传递是指在函数调用时,将实际参数的值复制一份传递给形式参数,在函数内部对形式参数的修改不会影响到实际参数。这种传递方式适用于基本数据类型的参数,比如int、float、char等。

在值传递的过程中,实际参数与形式参数是两个不同的变量,并且各自拥有独立的内存空间。修改形式参数的值不会影响到实际参数的值。

下面是一个值传递的示例代码:

public class Main {
    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 value) {
        value = 20;
        System.out.println("函数内部,value的值为:" + value);
    }
}

输出结果为:

调用前,num的值为:10
函数内部,value的值为:20
调用后,num的值为:10

可以看到,虽然在changeValue函数内部修改了value的值,但是对num的值没有产生影响,说明值传递不会改变实际参数的值。

## 引用传递

引用传递是指在函数调用时,将实际参数的地址传递给形式参数,形式参数和实际参数指向同一块内存空间。这种传递方式适用于引用类型的参数,比如数组、对象等。

在引用传递的过程中,实际参数和形式参数指向的是同一个对象。修改形式参数的值会直接影响到实际参数的值。

下面是一个引用传递的示例代码:

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println("调用前,arr的      个元素为:" + arr[0]);
        changeValue(arr);
        System.out.println("调用后,arr的      个元素为:" + arr[0]);
    }

    public static void changeValue(int[] array) {
        array[0] = 10;
        System.out.println("函数内部,array的      个元素为:" + array[0]);
    }
}

输出结果为:

调用前,arr的      个元素为:1
函数内部,array的      个元素为:10
调用后,arr的      个元素为:10

可以看到,通过changeValue函数修改了array的 个元素的值,实际上也改变了arr的 个元素的值,说明引用传递会改变实际参数的值。

## 区别

值传递和引用传递的主要区别有以下几点:

1. 对于基本数据类型,值传递拷贝的是实际参数的值,而引用传递拷贝的是实际参数的地址。

2. 对于引用类型,值传递和引用传递都是拷贝的地址,但是值传递传递的是一个新的地址副本,而引用传递传递的是实际参数的地址。

3. 值传递调用的是函数的副本,不会改变实际参数的值,而引用传递调用的是实际参数的引用,会改变实际参数的值。

4. 值传递是将实际参数的值复制一份传递给形式参数,形式参数在函数内部有自己的内存空间,不会影响到实际参数;引用传递是将实际参数的地址传递给形式参数,形式参数和实际参数指向同一块内存空间,修改形式参数会直接影响到实际参数。

综上所述,值传递和引用传递在传递方式和对实际参数的影响上有明显的区别,程序中需要根据实际情况选择不同的传递方式。