看到有一些筆試題是問如何不申請第三個變量交換兩個變量的值,例如 int a = 1; int b=2; 用三行代碼實現兩個數值的交換。我研究了加減法和異或的方法,認爲兩種方法在思路上是等價的,也調研過一些網友寫的文章,還是申請tmp變量的方法應用性強,這種題目不過是考考智商。本文主要討論異或的方法。
異或的方法可以用於int型和long型的變量,加減法的話也是相同的,一搜一大堆,就不贅述了,值得一提的是,我思考是不是char型或者String型變量也可以用異或的方法交換,經調研發現,只有按位計算的情況下纔可以,於是想到ascII碼,認爲char型變量也是可以通過異或三行代碼進行交換。
以下是java代碼:
import java.lang.System;
public class exchange
{
public static void main(String[] args)
{
char a = 'a';
char b = 'b';
a = (char)(((int)a)^((int)b));
b = (char)(((int)a)^((int)b));
a = (char)(((int)a)^((int)b));
System.out.println("a= " +a +" b= "+b);
}
}
運行結果: