我们都知道,Java数据类型有基本数据类型和引用数据类型两种。方法中的数据类型是基本数据类型,那么在调用方法传递值时,就是值传递;反之数据类型为引用数据类型时,调用方法传递值时,就是引用传递。
其实我们关注的值传递和引用传递的主要区别是:值传递在进行传参时,在方法体中修改参数数据,原有的数据不会发生改变,而引用传递却发生改变。
一: 值传递
下面看个例子
public static void main(String[] args) {
int x = 10;
System.out.println("x 原有值:" + x);
fun(x);
System.out.println("x 调用函数后的值: " + x);
}
public static void fun(int y){
--y; //执行自减操作: y = y - 1
}
最后输出:
值传递讲解:
二: 引用传递
下面看个例子
public static void main(String[] args) {
int[] arr = new int[]{10};
System.out.println("arr[0] 原有值:" + arr[0]);
fun(arr);
System.out.println("arr[0] 调用函数后的值: " + arr[0]);
}
public static void fun(int[] y){
--y[0]; //执行自减操作: y[0] = y[0] - 1
}
最后输出:
引用传递讲解
arr 和 y 都是指向分配空间的首地址,所以调用arr[0]和y[0]都是调用分配空间存储的数据,而针对上面的程序,分配空间存储的是一个指向常量的地址。