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

Java函数的传递方式是什么?

发布时间:2023-07-03 11:07:02

Java中函数的传递方式主要包括值传递和引用传递两种方式。

值传递是指在调用函数时,将实际参数的值复制给形式参数,函数中对形式参数的修改不会影响到实际参数的值。即在函数内部对形式参数的修改对实际参数没有影响。

在Java中,所有基本数据类型(如int、double、char等)都是以值传递的方式进行传递的。例如,以下代码示例演示了值传递:

public class PassByValueExample {

    public static void main(String[] args) {

        int num = 10;

        System.out.println("Before calling changeValue() method, num = " + num);

        changeValue(num);

        System.out.println("After calling changeValue() method, num = " + num);

    }

    

    public static void changeValue(int value) {

        value = 20;

        System.out.println("Inside changeValue() method, value = " + value);

    }

}

输出结果:

Before calling changeValue() method, num = 10

Inside changeValue() method, value = 20

After calling changeValue() method, num = 10

从上述示例中可以看出,调用changeValue方法时,将num的值10作为实际参数传递给形式参数value,在changeValue方法中对value的修改不会影响到num的值。

引用传递是指在调用函数时,将实际参数的引用(内存地址)复制给形式参数,函数内部对形式参数的修改会影响到实际参数的值,因为它们指向同一块内存地址。换句话说,通过引用传递可以使函数内部可以修改实际参数的值。

在Java中,所有引用类型(如对象、数组等)都是以引用传递的方式进行传递的。例如,以下代码示例演示了引用传递:

public class PassByReferenceExample {

    public static void main(String[] args) {

        int[] arr = {1, 2, 3};

        System.out.print("Before calling modifyArray() method, arr = [");

        for (int val : arr) {

            System.out.print(val + " ");

        }

        System.out.println("]");

        

        modifyArray(arr);

        

        System.out.print("After calling modifyArray() method, arr = [");

        for (int val : arr) {

            System.out.print(val + " ");

        }

        System.out.println("]");

    }

    

    public static void modifyArray(int[] array) {

        array[0] = 10;

        array[1] = 20;

        array[2] = 30;

        System.out.print("Inside modifyArray() method, array = [");

        for (int val : array) {

            System.out.print(val + " ");

        }

        System.out.println("]");

    }

}

输出结果:

Before calling modifyArray() method, arr = [1 2 3]

Inside modifyArray() method, array = [10 20 30]

After calling modifyArray() method, arr = [10 20 30]

从上述示例中可以看出,调用modifyArray方法时,将arr的引用(内存地址)作为实际参数传递给形式参数array,在modifyArray方法中对array的修改会影响到arr的值,即它们指向同一块内存地址。

需要注意的是,Java中的传递方式永远都是值传递,但是对于引用类型的实际参数,值传递实际上是传递了其引用(内存地址)的值,因此看起来像是引用传递。这也是为什么有时候会将Java的传递方式称为"传值引用"的原因。但是要明确的是,Java中没有真正的引用传递。无论是值传递还是"传值引用",实际上都是针对实际参数的值在内存中的复制或传递过程。