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

Java函数的参数传递方式及其区别解析

发布时间:2023-06-22 11:03:20

Java函数的参数传递方式有两种,分别是值传递和引用传递。

值传递:

在Java中,所有的基本类型(byte、short、int、long、float、double、char、boolean)都是以值的形式进行传递的,参数传递时传递的是原值的拷贝。例如下面的代码:

public class Main {
    public static void main(String[] args) {
        int a = 10;
        setValue(a);
        System.out.println(a);  // 输出结果为10
    }
    public static void setValue(int a) {
        a = 20;
        System.out.println(a);  // 输出结果为20
    }
}

我们可以看到,在调用setValue方法时,参数传递的是a的拷贝,所以a的值并未改变,仍然是原来的10。

引用传递:

除了基本类型之外,其他的所有类型都是以引用的形式进行传递的,在Java中,引用是对象的内存地址的一个副本。例如下面的代码:

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        setValue(arr);
        System.out.println(arr[0]);  // 输出结果为10
    }
    public static void setValue(int[] arr) {
        arr[0] = 10;
        System.out.println(arr[0]);  // 输出结果为10
    }
}

我们可以看到,在调用setValue方法时,传递的是arr的引用,所以在方法中可以改变arr中元素的值,这个改变是对原对象的改变,也就是说,arr的改变会影响到原对象,所以输出结果为10。

值传递和引用传递的区别:

1.传递的方式不同:值传递传递的是原值的拷贝,而引用传递传递的是对象的内存地址的一个副本。

2.影响原对象的能力不同:值传递不影响原对象,而引用传递会影响原对象。

3.对象的作用域不同:值传递在函数调用结束之后,原对象不会被改变;而引用传递可以在函数调用之后,继续通过引用来操作原对象。

4.开销不同:值传递需要在内存中创建一个变量的副本,开销较小;而引用传递需要在内存中创建对象的副本,开销较大。

因此,我们在编写函数时,需要根据具体的需求来选择合适的传递方式,从而提高效率,并保证程序的正确性。