黑马程序员技术交流社区

标题: 不用第三个变量交换2个值 [打印本页]

作者: Hugoo    时间: 2014-7-5 12:12
标题: 不用第三个变量交换2个值
public static void main(String[] args) {
  int a = 10;
  int b = 12;
  a = b + (b = a) * 0; // 这句实现交换
  System.out.println("a:" + a + "  b:" + b);
}





对于这段代码片段:

int a = 1;  

int b = 2;   

a = b + (b = a) * 0;  

如果将其转换为静态单赋值形式,并限制每个语句都是一个二元运算与一个赋值,就变成:
int a0 = 1;
int b0 = 2;
int b1 = a; // (b = a)
int temp1 = b1 * 0; // (b = a) * 0
int a1 = b0 + temp1; // b + (b = a) * 0

这样就比较明显了:a0、b0是交换前的值,a1、b1是交换后的值。

作者: 燿陚√揚葳    时间: 2014-7-5 16:28
学习了,我见过一个这样的
int a=3,b=5;//交换a,b的值
a=a^b;
b=a^b;
a=a^b;

作者: fantacyleo    时间: 2014-7-5 16:50
这种依赖表达式副作用的方法,用起来总觉得不踏实,而且只在变量类型允许"+"、"*"操作的情况下适用。我还是老老实实三变量法吧




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