📜  Java中的参数传递技术与示例(1)

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

Java中的参数传递技术与示例

在Java中,参数传递分为值传递和引用传递两种方式。本文将介绍这两种技术并且给出一些示例,帮助程序员更好地理解Java中的参数传递。

值传递

值传递指的是将参数值的一个副本传递给方法或函数,而不是参数本身,所以在方法或函数内部改变参数值,不会影响参数外部的值。这种传递方式使用Java中的基本数据类型,例如int、float、double等。

下面是一个简单的示例,展示了Java中的值传递:

public class ValueTransferExample {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        System.out.println("Before swap: num1 = " + num1 + ", num2 = " + num2);
        swap(num1, num2);
        System.out.println("After swap: num1 = " + num1 + ", num2 = " + num2);
    }

    public static void swap(int n1, int n2) {
        int temp = n1;
        n1 = n2;
        n2 = temp;
    }
}

执行以上代码,结果为:

Before swap: num1 = 10, num2 = 20
After swap: num1 = 10, num2 = 20

从结果可以看出,尽管在swap()函数中改变了num1和num2的值,但是在函数外部它们的值不改变。

引用传递

引用传递指的是将参数的引用传递给方法或函数,所以在方法或函数内部改变参数值,会引起参数外部的变化。这种传递方式使用Java中的对象类型,例如Object、String、数组等。

下面是一个简单的示例,展示了Java中的引用传递:

public class ReferenceTransferExample {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1, 2, 3};
        int[] arr2 = new int[]{4, 5, 6};
        System.out.println("Before swap: arr1 = " + Arrays.toString(arr1) + ", arr2 = " + Arrays.toString(arr2));
        swap(arr1, arr2);
        System.out.println("After swap: arr1 = " + Arrays.toString(arr1) + ", arr2 = " + Arrays.toString(arr2));
    }

    public static void swap(int[] a1, int[] a2) {
        int[] temp = a1;
        a1 = a2;
        a2 = temp;
    }
}

执行以上代码,结果为:

Before swap: arr1 = [1, 2, 3], arr2 = [4, 5, 6]
After swap: arr1 = [1, 2, 3], arr2 = [4, 5, 6]

从结果可以看出,尽管在swap()函数中改变了a1和a2的值,但是在函数外部它们的值不改变。

如果想要让函数在内部改变参数的值,并且在外部也能看到变化,则需要使用返回值来传递参数。下面是一个示例:

public class ReturnTransferExample {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1, 2, 3};
        int[] arr2 = new int[]{4, 5, 6};
        System.out.println("Before swap: arr1 = " + Arrays.toString(arr1) + ", arr2 = " + Arrays.toString(arr2));
        swap(arr1, arr2);
        System.out.println("After swap: arr1 = " + Arrays.toString(arr1) + ", arr2 = " + Arrays.toString(arr2));
    }

    public static int[] swap(int[] a1, int[] a2) {
        int[] temp = a1;
        a1 = a2;
        a2 = temp;
        return new int[][]{a1, a2};
    }
}

执行以上代码,结果为:

Before swap: arr1 = [1, 2, 3], arr2 = [4, 5, 6]
After swap: arr1 = [4, 5, 6], arr2 = [1, 2, 3]

从结果可以看出,使用返回值传递参数,在函数内部改变参数的值,在外部也能看到变化。

结论
  • 值传递是将参数值的一个副本传递给方法或函数,不会影响参数外部的值。
  • 引用传递是将参数的引用传递给方法或函数,会引起参数外部的变化。
  • 如果想要在内部改变参数的值,并且在外部也能看到变化,则需要使用返回值来传递参数。