java程序问题,如何用方法来交换两个整型变量的值?

我想在main函数中定义两个整形变量,然后将它们作为参数传送到方法中,在方法中交换他们的值。在C中我可以用指针做到这一点(将指针作为参数传入函数,把指针交换),但是在java中不太熟悉。

我已经把程序写好了,在方法中也交换成功了,为什么主函数输出时,还是原来交换前的值呢?

class ChangeValue{
public static void main(String[] args){
int a,b;
a=Integer.parseInt(args[0]); //用命令行来给a,b,赋值
b=Integer.parseInt(args[1]);
change(a,b); //在这儿进入交换函数
System.out.print(a + " "); //这里的输出,总是交换前的值。为什么呢??
System.out.print(b);
}

static void change(Integer a,Integer b){
int i,j;
i=a.intValue(); //这两行是为了比较a,b,的大小
j=b.intValue();
if(i>j){ //交换a,b的值
Integer t=new Integer(0);
t=b;
b=a;
a=t;
System.out.println(a+" "+ b); //用来调试,发现在这里是成功交换的。
}
}
}

程序是不报错的,假如我输入3 1 ,本来应该是输出 1 3 的,但是主函数中的输出却还是3 1 。
change方法中输出的是却 1 3没错。
为什么呢? 当change结束返回到主函数中时,不是应该已经把a,b交换了吗?

程序较长,感谢大家耐心的看我的问题,很困惑,希望给予帮助!

第1个回答  2013-04-24
这个是基本数据类型传递的是值而不是指针,如楼上所说,实现交换比较复杂,用反射可以实现,我见过的方法很麻烦,比较简单但不实用的实现方式,给你个连接:http://blog.csdn.net/wbruce_leew/article/details/6759198
第2个回答  2013-04-24
java没有指针,这题传过去就是副本,副本交换了回到主函数时原来的没有交换。本回答被提问者采纳
第3个回答  2015-10-07
int a =0;
int b=1;
int temp;
temp=a;
a=b;
b=temp;
这样之后,a,b的值就已经交换了本回答被网友采纳
第4个回答  2013-04-24
if(i>j) 交换值没有必要比较他们的大小。因为你比较了就会有可能是 小于或者等于

去掉这个就OK追问

我输入的时候就是一定会输入a 大于b的,我要求程序要是a 小于b 就不用交换。

但是就是满足i>j, 在主函数的输出,也是没有交换的值,虽然在change方法中很明显已经交换了,这是为什么?

第5个回答  2013-04-24
把a,b定义在外部试试
相似回答