A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

昨天开始接触JAVA,今天看教学视频看到了一个问题:在不创建第三个变量的情况下,实现a,b的值互换,a=3,b=8.问题我一开始想不出来,我觉得不可能实现:一桶油和一桶水在没有另外一个桶的情况下是不可能互换的;(满装的情况)
毕向东老师的解决方式是:a=a+b;   b=a- b;    a=a-b;
另外一种方式是:            a=a^b;   b=a^b;   a=a^b;
这种方式确实是解决了问题, 不过总感觉有点怪怪:在a+b赋值给a的时候,a+b是从哪个内存空间来的,在a+b赋值给a的时候,是否已经有一个内存空间先存储了a+b,之后再给a赋值?或者说在a存在的空间里面,开辟了另外一个内存空间来存储a+b?就如同油和水先倒进一个更加大得桶里面,之后再按照某种方式来分配。这样的话就和从新设置一个变量没什么不一样了。
求会的解答下,谢谢{:soso_e130:}


评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
个人估计互换方式的方法无穷多。数学思维
回复 使用道具 举报
我想有人帮我解决:a+b的空间哪里来?毕老师是不是偷换概念了?{:soso_e134:}
//在a里面开辟了另外一个空间存储a+b?
回复 使用道具 举报
本帖最后由 肥猫 于 2013-7-15 21:42 编辑

我能理解你啊,楼主不容易啊,作为菜鸟让我们一起努力吧{:soso_e105:}一起飞吧~~.
  1. /**
  2. 功能:交换两个变量中的数值。
  3. */
  4. class TTT
  5. {
  6. public static void main(String[] args)
  7. {
  8. //方法一
  9. System.out.println("方法一:");
  10. int a=5,b=3;
  11. System.out.println("转换前a="+a+","+"b="+b);
  12. a=a^b;
  13. b=a^b;
  14. a=a^b;
  15. System.out.println("转换后a="+a+","+"b="+b);
  16. System.out.println();

  17. //方法二:
  18. System.out.println("方法二:");
  19. int c=7,d=9,temp=0;
  20. System.out.println("转换前c="+c+","+"d="+d);
  21. temp=c;
  22. c=d;
  23. d=temp;
  24. System.out.println("转换后c="+c+","+"d="+d);
  25. System.out.println();
  26. //方法三:
  27. System.out.println("方法三:");
  28. int i=3,j=7;
  29. System.out.println("转换前i="+i+","+"j="+j);
  30. i=i+j;
  31. j=i-j;
  32. i=i-j;
  33. System.out.println("转换后i="+i+","+"j="+j);
  34. System.out.println();
  35. }
  36. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马