public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
a = b + (b = a) * 0; //这句实现交换
System.out.println("a:" + a + " b:" + b);
}
}
最近朋友给一道题,不用第三变量交换2个变量的值,手法很高明,但不知道原理.
大家一起分析下,怎么完成的,内存分析更好...
[b]问题补充:[/b]
[b]先感谢lewhwa的回答,不理解的第四步此时b的值应给为1,也就是1+0=1;为什么还是2呢?[/b]
这个巧妙运用了语言的运算符优先级(右侧优先,括号优先)。
首先,从右边开始。然后是这样的步骤:
1.b=2 已经保存了2;准备计算后边。
2.()>*,将a->b,此时=1;
3.1*0=0;
4.再将2+0=2赋值给a。从而完成整个交换。