值引用和地址引用的区别
值引用和地址引用的区别
值引用
public class Explore {
public static void main(String[] args) {
int scores = 100;
System.out.println(scores);//100
test(scores);//调用函数
System.out.println(scores);//100
}
public static void test(int a) {
System.out.println("***"+a);//***100
a = 0;
System.out.println(a);//0
}
}
输出结果
100
***100
0
100
上述代码中scores被赋值100,经过test方法将100这个值传递给了a,易知a是新定义的一个变量,即形参,当a改变时,scores(实参)不会改变,输出结果仍为100。
public static void main(String[] args) {
int [] scores = {100,200};
System.out.println(scores);//[I@52e922
System.out.println(scores[0]);//100
test(scores);//调用函数
System.out.println(scores[0]);//0
}
public static void test(int [] array) {
System.out.println(array);//[I@52e922
array[0] = 0;
}
}
输出结果
[I@52e922
100
[I@52e922
0
这次代码中定义scores为一个int类型的一维数组;输出scores的结果为数组在栈内存中存储的地址;输出scores[0]的结果为数组在堆内存中存储的100;调用函数,由结果可知函数将存储scores数组的地址传递给了array,此时scores与array均指向栈内存中的数组存储的地址,可知array[0]=scores[0],array[1]=scores[1]。
如果对array[0]进行修改,则scores[0]也会随之而变。
与值传递相比,地址传递中函数直接对实参进行修改,没有形参。

浙公网安备 33010602011771号