📅  最后修改于: 2023-12-03 15:16:31.574000             🧑  作者: Mango
在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]
从结果可以看出,使用返回值传递参数,在函数内部改变参数的值,在外部也能看到变化。