Java函数中的传引用和传值详解
发布时间:2023-06-25 04:14:47
Java是一种面向对象的编程语言,它的函数参数传递方式有两种,传值和传引用。这两种方式有所不同,会影响函数的执行结果。在Java中,基本类型的变量传递方式是传值,而引用类型的变量传递方式是传引用。下面我们将详细介绍Java函数中的传引用和传值。
传值
传值是指将实际参数的值复制一份传递给函数,函数对这份复制的值进行操作,而不会影响原来实际参数的值。Java中的基本数据类型都是传值,如int、float、double等。举个例子,比如下面的代码:
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 10;
swap(a, b);
System.out.println("a = " + a + ", b = " + b);
}
public static void swap(int x, int y) {
int temp;
temp = x;
x = y;
y = temp;
}
}
运行结果是:
a = 5, b = 10
这是因为,在swap函数中,x和y是传值的,swap函数内部对x和y的交换并不会影响到函数外部的a和b。
传引用
传引用是指将实际参数的地址传递给函数,函数对这个地址所对应的值进行操作,会影响到原来实际参数的值。Java中的引用类型都是传引用,如Object、数组、String等。举个例子,比如下面的代码:
public class Main {
public static void main(String[] args) {
int[] a = {5};
int[] b = {10};
swap(a, b);
System.out.println("a[0] = " + a[0] + ", b[0] = " + b[0]);
}
public static void swap(int[] x, int[] y) {
int[] temp;
temp = x;
x = y;
y = temp;
}
}
运行结果是:
a[0] = 5, b[0] = 10
这是因为,在swap函数中,x和y是传引用的,swap函数内部对x和y的交换并不会影响到函数外部的a和b。如果我们想在swap函数内部交换a和b的值,即要改变a和b的内容,可以这样:
public class Main {
public static void main(String[] args) {
int[] a = {5};
int[] b = {10};
swap(a, b);
System.out.println("a[0] = " + a[0] + ", b[0] = " + b[0]);
}
public static void swap(int[] x, int[] y) {
int temp;
temp = x[0];
x[0] = y[0];
y[0] = temp;
}
}
这段代码的运行结果是:
a[0] = 10, b[0] = 5
我们可以看到,在swap函数中,“x[0] = y[0]”和“y[0] = temp”这两行修改了a和b的值,因为x和y是传引用的。
总结
在Java函数中,参数传递的方式有传值和传引用两种,基本数据类型传值,引用类型传引用。传值是将实际参数的值复制一份传递给函数,函数对这份复制的值进行操作,而不会影响原来实际参数的值;传引用是将实际参数的地址传递给函数,函数对这个地址所对应的值进行操作,会影响到原来实际参数的值。对于需要改变参数值的情况,我们可以使用传引用的方式完成。
