例:x = 4;y = 5。如何在不引入第三個變量的情況下互換x與y的值?
算術運算
第一種方法是加法。
x = x + y;
y = x - y;
x = x - y;
這個方案的缺陷在於,當x或者y足夠大的時候,可能產生溢出。
第二種方法,把加法變爲減法,與方案一類似。
x = x - y;
y = x + y;
x = y - x;
當然,改換成乘法和除法也可以解決以上問題。但是算術運算要特別注意兩個問題:
- 溢出問題:在運算過程中可能會產生溢出現象,加法和乘法的產生溢出概率大於減法和除法。
- 精度問題:當交換小數的時候,使用算術運算會產生計算精度問題。例:
如果真正的在實踐中實現這種功能,還需要加一些特殊判斷,比如兩個值相等該如何處理,兩個值可能會溢出該如何處理(try…catch…)。
異或運算
異或位運算(變成二進制之後進行異或運算),不太好理解。可以參考這篇文章按位異或運算符^.
x ^= y;
y ^= x;
x ^= y;
解構
這個解法是最簡單的方法,也不會產生溢出問題:直接運用解構手法,交換x和y的位置。
[x, y] = [y, x];
而這個方法更厲害的地方在於,它不僅僅可以用來交換數值(Number),也可以用來交換其他任意類型數據。
總結
在實際場景中遇到相關問題,推薦使用解構的方法,不僅代碼簡單,而且也不會產生溢出和計算精度的問題。