- class TestPrimitiveTransfer
- {
- public static void swap(int a,int b)
- {
- //下面三行代码实现a,b变量的值交换
- //定义一个临时变量来保存a的值
- int temp = a;
- //把b的值赋给a
- a = b;
- //把临时变量temp的值赋给b
- b=temp;
- System.out.println("swap 方法里,a的值是:"+a+";b的值是:"+b);
- }
- public static void main(String[] args)
- {
- int a=6;
- int b=9;
- swap(a,b);
- System.out.println("交换后,实参a的值是:"+a+";实参b的值是:"+b);
- }
- }
复制代码 运行结果:swap 方法里,a的值是:9;b的值是:6
交换后,实参a的值是:6;实参b的值是:9
当程序执行swap方法时,系统进入swap方法,并将main方法中的a,b变量作为参数值传入swap方法,传入swap方法的是a,b的副本,而不是a,b本身,进入swap方法后系统中产生了4个变量,main方法栈区2个,swap方法栈区2个。
在main方法中调用swap方法时,main方法还未结束,因此,系统分别为main方法和swap方法分配两块栈区,分别保存main方法和swap方法的局部变量。main方法中的a,b变量作为参数传入swap方法,实际上是在swap方法栈区中重新产生了两个变量a,b,并将main方法栈区中a,b变量的值分别赋给swap方法中的a,b参数,就是swap方法的a,b进行了初始化吧。此时系统中有两个a变量,两个b变量,只是存在与不同的方法栈区中而已。
程序在swap方法交换a,b两个变量的值,实际是对swap方法中的a,b变量进行交换,main方法中的a,b变量并未有任何改变。这就是值传递:当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋给方法的形参变量,方法了操作的并不是实际的实参变量。
|