如何交换两个整数而不使用临时变量?

3 min read

可以使用加减法和位运算实现两个整数的交换,如下:

public static void swap(int a, int b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    System.out.println("a = " + a + ", b = " + b);
}

这里使用了异或运算(^)和位运算来实现交换。具体过程如下:

  1. a ^ b:将 a 和 b 进行异或运算,得到一个新的值,相当于将 a 和 b 中的所有不同二进制位的值互换;
  2. b = a ^ b:将 b 赋值为 a ^ b,相当于将 b 中原本的值赋给了 b,这样 b 中就存储了 a 的值;
  3. a = a ^ b:将 a 赋值为 a ^ b,相当于将 a 中之前存储的 a 的值与 b 中存储的 a 的值进行异或运算,得到的结果就是 b 中存储的原来的 b 的值,这样 a 中就存储了 b 的值。

最终实现了a和b的交换,而且不需要使用临时变量。