java不使用第三變量交換兩個變量的值
不使用第三變量交換兩個變量的值
在 Java 中,經常會需要交換兩個變量的值,我們一般是使用第三變量完成
比如:
temp = a; a = b; b = temp;
這樣的寫法確實能達成目標,但因此而引入了第三變量,對資源的消耗增加了。
這里總結了兩種不使用第三變量實現(xiàn)的方式
這兩種方法僅為個人總結,不能斷定只有這三種,非常希望大家能提出其他的方式,互相學習。
加減交換法
a = a + b; b = a - b; a = a - b;a = a + b; b = a - b; a = a - b;
這種方式還有更高級的寫法:
a = a + b - (b = a);
這種寫法確實達到了目標,但還只是數字層面的技巧,下面介紹一種計算機底層的方式。
異或運算法
異或運算平時用得較少,這里先介紹一下。
兩個數進行異或運算,其實就是它們的二進制數每一位進行運算:相同為 0,不同為 1。
0 ^ 0 = 0;1 ^ 0 = 1;0 ^ 1 = 1;1 ^ 1 = 0;
由此可以得出異或的 3 個特點:
- 0 異或任何數 = 任何數
- 1異或任何數 = 任何數取反
- 任何數異或自己 = 把自己置0
異或的常見用途:
- 使某些特定的位翻轉
例如對數 10100001 的第 2 位和第 3 位翻轉,則可以將該數與 00000110 進行異或運算:
10100001 ^ 00000110 = 10100111
- 兩個變量值的交換,而不必使用第三變量
這就是我們這里的需求了。
例如交換兩個整數 a = 10100001,b = 00000110 的值, 可以這樣實現(xiàn):
a = a ^ b; // a = 10100111 b = b ^ a; // b = 10100001 a = a ^ b; // a = 00000110
以上過程等效于:
a = a ^ b; b = b ^ a = b ^ ( a ^ b ) = a ^ b ^ b = a ^ 0 = a; a = a ^ b = (a ^ b) ^ a = b ^ a ^ a = b ^ 0 = b;
這樣就實現(xiàn)了兩個變量值的交換。
更推薦這種方式,倒不因為這樣寫更高級,而是這樣的二進制運算是最快的,執(zhí)行效率最高。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java獲取http和https協(xié)議返回的json數據
本篇文章主要介紹了Java獲取http和https協(xié)議返回的json數據 ,本篇文章提供兩個方法,幫助各位如何獲取http和https返回的數據。有興趣的可以了解一下。2017-01-01
RecyclerChart動態(tài)屬性圖標聯(lián)動數據動態(tài)加載詳解
這篇文章主要為大家介紹了RecyclerChart動態(tài)屬性圖標聯(lián)動數據動態(tài)加載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

