为什么“a^=b^=a^=b;”与“a^=b;”不同;b^=a;a^=b;“?
2022-09-02 05:23:58
我尝试了一些代码来交换Java中的两个整数,而不使用第三个变量,使用XOR。
以下是我尝试过的两个交换函数:
package lang.numeric;
public class SwapVarsDemo {
public static void main(String[] args) {
int a = 2984;
int b = 87593;
swapDemo1(a,b);
swapDemo2(a,b);
}
private static void swapDemo1(int a, int b) {
a^=b^=a^=b;
System.out.println("After swap: "+a+","+b);
}
private static void swapDemo2(int a, int b) {
a^=b;
b^=a;
a^=b;
System.out.println("After swap: "+a+","+b);
}
}
此代码生成的输出是这样的:
After swap: 0,2984
After swap: 87593,2984
我很好奇,为什么会有这样的说法:
a^=b^=a^=b;
和这个不一样?
a^=b;
b^=a;
a^=b;