黑马程序员技术交流社区

标题: 昨天开始学习编程语言的菜鸟的技术疑惑!!! [打印本页]

作者: 杨清杰    时间: 2013-7-15 21:33
标题: 昨天开始学习编程语言的菜鸟的技术疑惑!!!
昨天开始接触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:}



作者: 肥猫    时间: 2013-7-15 21:40
本帖最后由 肥猫 于 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. }
复制代码

作者: 杨清杰    时间: 2013-7-15 21:45
我想有人帮我解决:a+b的空间哪里来?毕老师是不是偷换概念了?{:soso_e134:}
//在a里面开辟了另外一个空间存储a+b?
作者: 杨清杰    时间: 2013-7-15 21:51
个人估计互换方式的方法无穷多。数学思维





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2