代碼實例
先看一下交換變量的常規方式:
public static void swap1() {
int i = 1, j = 5;
System.out.println("i:" + i + ",j:" + j);
int tmp=i;
i = j;
j = tmp;
System.out.println("i:" + i + ",j:" + j);
}
輸出:
i:1,j:5
i:5,j:1
使用臨時變量存儲一下其中一個值,這種方法所有人都知道,且可以交換任何變量。
如果是int或者long等整數變量,還可以通過以下方式交換:
public static void swap2() {
int i = 4, j = 5;
System.out.println("i:" + i + ",j:" + j);
i = i ^ j;
j = i ^ j;
i = i ^ j;
System.out.println("i:" + i + ",j:" + j);
}
輸出:
i:4,j:5
i:5,j:4
從代碼可以看出,經過3次異或變量就換掉了。
什麼是異或
要理解上面交換原理,我們先看看什麼是異或:
- | 變量1 | 變量2 | 變量3 |
---|---|---|---|
值1 | 1 | 1 | 0 |
值2 | 0 | 1 | 0 |
結果 | 1 | 0 | 1 |
二進制異或的結果是:不同爲1,相同爲0
實例分析
以上例子中,第一次異或,結果=1:
- | 變量1 | 變量2 | 變量3 |
---|---|---|---|
值1 | 1 | 0 | 0 |
值2 | 1 | 0 | 1 |
結果 | 0 | 0 | 1 |
得出結果001就類似中間變量,在下面兩次異或時,都得到另一個變量的值(4去異或就得到5,5去異或就得到4)
第二次異或,結果=4:
- | 變量1 | 變量2 | 變量3 |
---|---|---|---|
值1 | 0 | 0 | 1 |
值2 | 1 | 0 | 1 |
結果 | 1 | 0 | 0 |
第三次異或,結果=5:
- | 變量1 | 變量2 | 變量3 |
---|---|---|---|
值1 | 0 | 0 | 1 |
值2 | 1 | 0 | 0 |
結果 | 1 | 0 | 1 |
注意:這種交換變量方法也只適用於整數,float、double之類的是不行的