Java中的传递机制——值传递
程序员文章站
2024-02-11 21:29:34
...
Java中传递机制——值传递机制
值传递的本质是复制原有的值产生一个新的副本进行传递
1,当进行基本变量交换的时候,系统为main和swap_1分别开辟一个栈区,在main栈区中是最原本变量,在swap_1栈区中使用的是复制main栈区的变量副本,swap_1栈区中,副本原原本本进行完变量交换,而且成功交换,退出swap_1栈区后,main栈区还是main栈区,其中的变量并未改变。
2,当进行引用变量进行交换的时候,系统会为mian和swap_2分别开辟一个栈区,在main栈区中是原本的引用变量,在swap_2栈区中使用的时候复制main栈区的引用变量副本,注意是引用变量,对于引用变量而言,他的引用是存在于栈中,但其真正的值是存在于堆中,从栈指向堆地址得到自己的值,swap_2栈区中引用变量成功进行交换,但其指向堆中的值跟main指向堆中的值是一样的,也就是说,swap_2修改了堆中的值,当返回main栈区后,在指向堆的时候,获取到的值自然就改变了。
3,当你通过swap_3方法将对象赋为空后,返回到main栈区,该对象仍然存在,进一步说明了值传递的机制原理。
public class Value_propagation {
int a = 11 ;
int b = 22 ;
public static void main(String[] args) {
Value_propagation vp = new Value_propagation();
int c = 11 ;
int d = 22 ;
vp.swap_1(c, d);
vp.swap_2(vp);
System.out.println("c = " + c );
System.out.println("d = " + d );
System.out.println("====================");
System.out.println("a = " + vp.a);
System.out.println("b = " + vp.b);
vp.swap_3(vp);
System.out.println("====================");
System.out.println("a = " + vp.a);
System.out.println("b = " + vp.b);
}
public void swap_1(int a ,int b) {
int temp = 0 ;
temp = a ;
a = b ;
b = temp;
}
public void swap_2(Value_propagation vp) {
int temp = 0 ;
temp = vp.a ;
vp.a = vp.b ;
vp.b = temp;
}
public void swap_3(Value_propagation vp) {
vp = null;
}
}
测试结果:
c = 11
d = 22
===============
a = 22
b = 11
===============
a = 22
b = 11
下一篇: 你真的懂软引用、弱引用、虚引用吗?