首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 變量值交換三大經典算法:中間變量、算術運算、位運算深度解析

     編輯:Java 程式設計入門

方法一:中間變量法(最通用、最安全)


int x = 10, y = 20;
int temp = x;
x = y;
y = temp;

類比:空杯換酒法。temp 為空杯,x 白酒,y 紅酒。白酒→空杯,紅酒→x杯,白酒→y杯。

  • 適用任意類型(對象引用、基本類型)
  • 無溢出風險,可讀性最強
  • 現代 JVM 優化後性能極高,無額外開銷

方法二:算術運算法(僅限數值類型)


int x = 10, y = 20;
x = x + y;  // x = 30
y = x - y;  // y = 30 - 20 = 10
x = x - y;  // x = 30 - 10 = 20
  • 風險:整數溢出導致結果錯誤(如 Integer.MAX_VALUE + 1)
  • 浮點數精度損失問題
  • 不可用於對象引用、boolean、char 等非數值類型
  • 現代 CPU 流水線下可能比中間變量法慢(依賴鏈長)

方法三:位運算 XOR 法(僅限整數類型)


int x = 10, y = 20;
x = x ^ y;
y = x ^ y;  // (x^y)^y = x
x = x ^ y;  // (x^y)^x = y

原理:a ^ b ^ b = a,a ^ b ^ a = b。XOR 自逆性。

  • 無溢出風險(位運算不進位)
  • 不可用於浮點數、對象引用
  • 致命缺陷:若 x 和 y 指向同一變量(別名),結果歸零
    
    int x = 10;
    swap(x, x); // 同一變量
    // x = x ^ x = 0
    // y = 0 ^ 0 = 0
    // x = 0 ^ 0 = 0 → 數據丟失!
    
  • 可讀性差,維護成本高

綜合對比與建議

維度中間變量算術運算XOR 位運算
類型通用性✅ 所有類型❌ 僅數值❌ 僅整數
溢出安全✅ 安全❌ 風險✅ 安全
別名安全✅ 安全✅ 安全❌ 歸零
可讀性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
現代 JVM 性能極優(寄存器分配)一般一般

最佳實踐

  1. 生產代碼無腦用中間變量法:清晰、安全、JIT 優化後零開銷
  2. 面試考察 XOR 法時,必須指出同一變量交換導致歸零缺陷
  3. 算術法僅作算法理解,實戰禁用
  4. Java 無原生元組/多賦值語法(如 Python x, y = y, x),中間變量是標準寫法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved