不借助第三方變數實現兩個整數變數值的互換

不動聲色的蝸牛發表於2013-11-06

          方法1:

          public void test(int a,int b){
                System.out.println("a="+a+";b="+b);
                a=a+b;
                b=a-b;//a-b為原來a中的值。
                a=a-b;//由於此時的b是原來a中的值,所以本行程式碼的a-b即為原來b中的值。
                System.out.println("a="+a+";b="+b);
          }

          注意:這種情況有一個侷限性:由於a和b的值是未知的,所以如果這兩個值都比較大的時候,則容易出現超出int範圍的問題。

          方法2:

          public void test_1(int a,int b){//採用異或運算子來實現,這種方法的原理是使用了異或運算這樣一個特點:一個數異或同一個數兩次其結果還是那個數。
                System.out.println("a="+a+";b="+b);
                a=a^b;
                b=a^b;//相當於(a(剛傳過來的a)^b(剛傳過來的a))^b(剛傳過來的a),根據異或運算的特點可知其結果為a(剛傳過來的a),即b=a(剛傳過來的a)。
                a=a^b;//相當於(a(剛傳過來的a)^b(剛傳過來的b))^b,由於程式碼執行過上面的程式碼後b的值變為了a(剛傳過來的a),所以等號右邊相當於(a(剛傳過來的a)^b(剛傳過來的b))^a(剛傳過來的a),根據異或運算的特點可知其結果為b(剛傳過來的b)。
                System.out.println("a="+a+";b="+b);
          }

相關文章