變量交換是程序設計中的基礎操作,看似簡單卻蘊含著不同的算法思想。本文總結 Java 中三種主流交換方式,並從原理、性能、適用場景三個維度進行深度對比。
int temp = a;
a = b;
b = temp;
a = b - a; // a 存儲差值
b = b - a; // b 變為原 a
a = b + a; // a 變為原 b
將變量視為數軸上的點,通過「距離」進行交換:
a = b - a:求得兩點距離,存入 ab = b - a:用原 b 減去距離,得到原 a,存入 ba = b + a:用新 b(原 a)加上距離,得到原 b,存入 aa = a ^ b;
b = a ^ b;
a = a ^ b;
利用異或(XOR)運算特性:x ^ y ^ y = x
a = a ^ b:a 變為「混合碼」b = a ^ b = (a ^ b) ^ b = a:b 恢復為原 aa = a ^ b = (a ^ b) ^ a = b:a 恢復為原 b| 維度 | 臨時變量法 | 算術運算法 | 異或運算法 |
|---|---|---|---|
| 可讀性 | ★★★★★ | ★★☆☆☆ | ★☆☆☆☆ |
| 通用性 | 所有類型 | 數值類型 | 整數類型 |
| 安全性 | 最高 | 有溢出風險 | 同引用歸零 |
| 性能 | 極快(編譯器優化) | 3次運算 | 3次位運算 |
| 推薦指數 | ★★★★★ | ★☆☆☆☆ | ★★☆☆☆ |
生產環境代碼請無腦使用「臨時變量法」。現代 JVM 對此模式優化極佳,內存佔用可忽略,代碼可讀性與維護性才是長遠價值。其他兩種方式僅作算法原理學習或極端場景備選。