欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java不使用第三變量交換兩個變量的值

 更新時間:2024年04月25日 09:16:02   作者:天航星  
這篇文章主要介紹了java不使用第三變量交換兩個變量的值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

不使用第三變量交換兩個變量的值

在 Java 中,經(jīng)常會需要交換兩個變量的值,我們一般是使用第三變量完成

比如:

temp = a;
a = b;
b = temp;

這樣的寫法確實能達成目標(biāo),但因此而引入了第三變量,對資源的消耗增加了。

這里總結(jié)了兩種不使用第三變量實現(xiàn)的方式

這兩種方法僅為個人總結(jié),不能斷定只有這三種,非常希望大家能提出其他的方式,互相學(xué)習(xí)。

加減交換法

a = a + b;
b = a - b;
a = a - b;a = a + b;
b = a - b;
a = a - b;

這種方式還有更高級的寫法:

a = a + b - (b = a);

這種寫法確實達到了目標(biāo),但還只是數(shù)字層面的技巧,下面介紹一種計算機底層的方式。

異或運算法

異或運算平時用得較少,這里先介紹一下。

兩個數(shù)進行異或運算,其實就是它們的二進制數(shù)每一位進行運算:相同為 0,不同為 1。

0 ^ 0 = 0;1 ^ 0 = 1;0 ^ 1 = 1;1 ^ 1 = 0;

由此可以得出異或的 3 個特點:

  • 0 異或任何數(shù) = 任何數(shù)
  • 1異或任何數(shù) = 任何數(shù)取反
  • 任何數(shù)異或自己 = 把自己置0

異或的常見用途:

  • 使某些特定的位翻轉(zhuǎn)

例如對數(shù) 10100001 的第 2 位和第 3 位翻轉(zhuǎn),則可以將該數(shù)與 00000110 進行異或運算:

10100001 ^ 00000110 = 10100111
  • 兩個變量值的交換,而不必使用第三變量

這就是我們這里的需求了。

例如交換兩個整數(shù) 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í)行效率最高。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaSe和JavaEE的區(qū)別原理面試題精講

    JavaSe和JavaEE的區(qū)別原理面試題精講

    這篇文章主要為大家介紹了JavaSe和JavaEE的區(qū)別原理面試題精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java實現(xiàn)簡單畫畫畫板

    Java實現(xiàn)簡單畫畫畫板

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單畫畫畫板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    本篇文章主要介紹了Java獲取http和https協(xié)議返回的json數(shù)據(jù) ,本篇文章提供兩個方法,幫助各位如何獲取http和https返回的數(shù)據(jù)。有興趣的可以了解一下。
    2017-01-01
  • Ubuntu 使用Jni開發(fā)實例詳解

    Ubuntu 使用Jni開發(fā)實例詳解

    這篇文章主要介紹了Ubuntu 使用Jni開發(fā)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java使用正則表達式演示電話與郵箱格式

    Java使用正則表達式演示電話與郵箱格式

    本文詳細(xì)講解了Java正則表達式的用法,舉例演示電話和郵箱格式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • MyBatis注解CRUD與執(zhí)行流程深入探究

    MyBatis注解CRUD與執(zhí)行流程深入探究

    這篇文章主要介紹了MyBatis注解CRUD與執(zhí)行流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • java拋出異常與finally實例解析

    java拋出異常與finally實例解析

    這篇文章主要介紹了java拋出異常與finally實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • RecyclerChart動態(tài)屬性圖標(biāo)聯(lián)動數(shù)據(jù)動態(tài)加載詳解

    RecyclerChart動態(tài)屬性圖標(biāo)聯(lián)動數(shù)據(jù)動態(tài)加載詳解

    這篇文章主要為大家介紹了RecyclerChart動態(tài)屬性圖標(biāo)聯(lián)動數(shù)據(jù)動態(tài)加載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • spring異步service中處理線程數(shù)限制詳解

    spring異步service中處理線程數(shù)限制詳解

    這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • springboot?jpa之返回表中部分字段的處理詳解

    springboot?jpa之返回表中部分字段的處理詳解

    這篇文章主要介紹了springboot?jpa之返回表中部分字段的處理詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論