可以使用加减法和位运算实现两个整数的交换,如下:
public static void swap(int a, int b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a = " + a + ", b = " + b);
}
这里使用了异或运算(^)和位运算来实现交换。具体过程如下:
- a ^ b:将 a 和 b 进行异或运算,得到一个新的值,相当于将 a 和 b 中的所有不同二进制位的值互换;
- b = a ^ b:将 b 赋值为 a ^ b,相当于将 b 中原本的值赋给了 b,这样 b 中就存储了 a 的值;
- a = a ^ b:将 a 赋值为 a ^ b,相当于将 a 中之前存储的 a 的值与 b 中存储的 a 的值进行异或运算,得到的结果就是 b 中存储的原来的 b 的值,这样 a 中就存储了 b 的值。
最终实现了a和b的交换,而且不需要使用临时变量。