詳解java交換兩個整數變量的三種方法


在進行開發時,往往需要對兩個整數變量進行交換,可采用以下三種方法:

1、借助臨時變量;

   public static void swap1(int a,int b ){
        System.out.println("原始值:"+a+","+b);
        int temp =a ;
         a = b;
         b = temp;
        System.out.println("交換后:"+a+","+b);
    }

此種方式比較好理解,在開發時可直接使用。但在面試中使用,似乎顯得低端。

2、借助“先加后減”操作,不生成臨時變量。

1 public static void swap3(){
2         int a=Integer.MAX_VALUE;
3         int b = Integer.MAX_VALUE-1;
4         System.out.println("原始值:"+a+","+b);
5         a =a+b;
6         b= a-b;
7         a =a-b;
8         System.out.println("交換后:"+a+","+b);
9     }

使用此種方法時,注意加減的次序。

另外一點,有人說在使用這種方法時需要注意數值越界的問題。為驗證此問題,將a和b的值都是設為整型最大值,結果仍無誤,此說法似乎有誤。

3、借助異或

 public static void swap2 (int a ,int b){
        System.out.println("原始值:"+a+","+b);
        a  = a^b;
        b = b^a;
        a = a^b;
        System.out.println("交換后:"+a+","+b);
    }

其實現原理是進行異或操作的數學性質。如下

1.任一變量X與其自身進行異或結果為0,即 X^X=0
2.任一變量X與0進行異或結果不變,即 X^0=X
3.異或運算具有可結合性,即 a^b^c = (a^b)^c = a^(b^c)
4.異或運算具有可交換性,即 a^b = b^a。

在異或性質的基礎之前進行操作,實現交換的執行過程為:

 a = a ^ b   ==>   a = a ^ b;//獲得異或值,賦值給a
 b = a ^ b   ==>   (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a,//將上一步異或后的a帶入,獲得b
 a=  a ^ b   ==>   (a ^ b) ^ b =  (a ^ b) ^ a = a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b, 該值賦值給a,即 a = b

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM