Java实现两个int类型变量值交换
两种方式:加减、异或。
public class Swaptest {
public static void main(String[] args) {
int a = 1;
int b = 2;
swap1(a, b);
swap2(a, b);
}
public static void swap1(int a, int b) {
System.out.printf("before swap1 : a = %d, b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
System.out.printf("after swap1 : a = %d, b = %d\n", a, b);
/* a = a + b - a;
* b = a + b - b;
* 缺点,如果a+b超过int类型上线,则溢出。
*/
}
public static void swap2(int a, int b) {
System.out.printf("before swap2 : a = %d, b = %d\n", a, b);
a = a^b;
b = b^a;
a = a^b;
System.out.printf("after swap2 : a = %d, b = %d\n", a, b);
/* a = a^b^a
* b = b^a^b
* 一个数异或同一个数两次,结果还是那个数,而且不会超出int范围。
*/
}
}
本文介绍两种在Java中不使用第三个变量进行两个int类型变量值交换的方法:加减法和异或法。加减法通过相加再相减实现变量值交换,但存在溢出风险;异或法则利用位运算特性,安全且高效。

1万+

被折叠的 条评论
为什么被折叠?



