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

我想在main函数中定义两个整形变量,然后将它们作为参数传送到方法中,在方法中交换他们的值。在C中我可以用指针做到这一点(将指针作为参数传入函数,把指针交换),但是在ja... 我想在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交换了吗?

程序较长,感谢大家耐心的看我的问题,很困惑,希望给予帮助!
展开
 我来答
后弘雅8A
2013-04-24 · TA获得超过210个赞
知道答主
回答量:45
采纳率:0%
帮助的人:33.3万
展开全部
这个是基本数据类型传递的是值而不是指针,如楼上所说,实现交换比较复杂,用反射可以实现,我见过的方法很麻烦,比较简单但不实用的实现方式,给你个连接:http://blog.csdn.net/wbruce_leew/article/details/6759198
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
517183480
2013-04-24
知道答主
回答量:13
采纳率:0%
帮助的人:5.9万
展开全部
java没有指针,这题传过去就是副本,副本交换了回到主函数时原来的没有交换。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xqqlxm
2015-10-07 · TA获得超过338个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:233万
展开全部
int a =0;
int b=1;
int temp;
temp=a;
a=b;
b=temp;
这样之后,a,b的值就已经交换了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-04-24 · TA获得超过154个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:329万
展开全部
if(i>j) 交换值没有必要比较他们的大小。因为你比较了就会有可能是 小于或者等于

去掉这个就OK
追问
我输入的时候就是一定会输入a 大于b的,我要求程序要是a 小于b 就不用交换。

但是就是满足i>j, 在主函数的输出,也是没有交换的值,虽然在change方法中很明显已经交换了,这是为什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f999dfd
2013-04-24
知道答主
回答量:27
采纳率:0%
帮助的人:20万
展开全部
把a,b定义在外部试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式