void swap(Integer a,Integer b)
{
Integer t = new Integer(a);
a = b;
b = t;
}
Integer a = new Integer(1);
Integer b = new Integer(2);
System.out.println("交换前"+a+ " "+b);//1 2
swap(a,b);
System.out.println("交换后"+a+ " "+b);//1 2
可是,结果为
public void swap(Integer a,Integer b)
{
Integer t = a;
this.a = b;
this.b = t;
}
public static void main(String args[]){
test t = new test();
t.a = new Integer(1);
t.b = new Integer(2);
System.out.println("交换前"+t.a+ " "+t.b);//1 2
t.swap(t.a,t.b);
System.out.println("交换后"+t.a+ " "+t.b);//2 1
}
}[/code]不解释,自己理解作者: 匿名 时间: 2011-9-25 21:45
a,b是局部变量,参数传递完以后, a、b作为局部变量的内存被释放,所以a、b的值不变。作者: 史卫平 时间: 2011-9-25 22:26
原来发了一条回复,回错地方了!!!!!
[ 本帖最后由 史卫平 于 2011-09-25 22:28 编辑 ]作者: 匿名 时间: 2011-9-29 18:34
全局变量中的对象a b 和 swap方法中参数 a b 对象 引用的不是同一块内存
在swap方法中 把swap方法中参数对象 a b中的数据对调后,并没有影响到 全局变量a b 引用内存中数据。作者: 匿名 时间: 2011-9-30 11:56
在java中没有引用传递,只有值传递
所谓值传递就是将实际参数的副本(复制品) 传入方法内.而参数本身不会受到影响,
public class TestPrimitiveTransfer
{
public static void swap(int a , int b)
{
//下面三行代码实现a、b变量的值交换。
//定义一个临时变量来保存a变量的值
int tmp = a;
//把b的值赋给a
a = b;
//把临时变量tmp的值赋给a
b = tmp;
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);
}
}
当程序执行到wrap方法时,系统进入swrap方法,并将main方法中的a,b变量作为参数值传入swrap,传入swrap方法传入的只是a b的副本,
详细 的内容请看李刚老师的疯狂java讲义