不用第三个变量交换2个值
不借助第三个变量让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是交换后的值。
说真的这样写只是在自己的代码里少用了个临时变量而已。编译器还是得插入一些临时变量,并不是说自己少用了显式的变量就等于实际运行效率高。
文章评论 (0)
暂无评论