看一下输出就知道,那个方法没起作用,方法里面的变量值确实变了,但是main方法里的变量还是原来的值作者: 张奇云 时间: 2011-11-16 19:04
不可能实现!
基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。 作者: SilenceSea 时间: 2011-11-16 19:29
楼上说的对,不可能实现。
基本数据类型的参数传递是值传递,只是将栈内存中变量的值复制后传递给方法。
无论方法体内的形参(a和b)怎么交换,都不会影响实参(a和b)的值。作者: quanhui 时间: 2011-11-17 09:00
以下是C#中的解决办法:
public void Change(ref int a, ref int b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
看来Java至少在这个问题上是落后的。作者: 程立彬 时间: 2011-11-17 11:10
楼主可以换一个方法
void Change(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
通过引用传递。作者: quanhui 时间: 2011-11-17 11:15
程立彬 发表于 2011-11-17 11:10
楼主可以换一个方法
void Change(int& a, int& b)
{
这是Java么???作者: 程立彬 时间: 2011-11-17 11:19
quanhui 发表于 2011-11-17 11:15
这是Java么???
java不能有引用吗?作者: moonlight 时间: 2011-11-17 11:20
你定义了a=1,b=2.然后把这两个值当做参数调用了 change(a,b)方法 这个方法的作用只是形参交换数值 ,但对实参没有任何影响。不知道你发现这一点没有 你定义的这两个静态变量 static int a; static int b; 与change(a,b)方法里的a和b根本不是一回事,是两个不同的性质。public static void change(int a,int b)
{
a = a+ b;
b = a - b;
a = a - b;