欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的传递机制——值传递

程序员文章站 2024-02-11 21:29:34
...

Java中传递机制——值传递机制
值传递的本质是复制原有的值产生一个新的副本进行传递

1,当进行基本变量交换的时候,系统为main和swap_1分别开辟一个栈区,在main栈区中是最原本变量,在swap_1栈区中使用的是复制main栈区的变量副本,swap_1栈区中,副本原原本本进行完变量交换,而且成功交换,退出swap_1栈区后,main栈区还是main栈区,其中的变量并未改变。

Java中的传递机制——值传递
2,当进行引用变量进行交换的时候,系统会为mian和swap_2分别开辟一个栈区,在main栈区中是原本的引用变量,在swap_2栈区中使用的时候复制main栈区的引用变量副本,注意是引用变量,对于引用变量而言,他的引用是存在于栈中,但其真正的值是存在于堆中,从栈指向堆地址得到自己的值,swap_2栈区中引用变量成功进行交换,但其指向堆中的值跟main指向堆中的值是一样的,也就是说,swap_2修改了堆中的值,当返回main栈区后,在指向堆的时候,获取到的值自然就改变了。

Java中的传递机制——值传递
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

相关标签: Java 机制