當一個運算式包含多個運算子時,Java 依照優先順序由高到低執行運算。優先順序相同時,依結合性(多為左至右)決定順序。熟悉優先順序表雖有助理解程式碼,但實務上強烈建議使用括號明確表達意圖,提升可讀性並避免錯誤。
| 優先順序 | 運算子 | 說明 | 結合性 |
|---|---|---|---|
| 1 | () [] . | 括號、陣列存取、成員存取 | 左至右 |
| 2 | ! + - ~ ++ -- | 邏輯非、正負號、位元補數、遞增遞減 | 右至左 |
| 3 | * / % | 乘法、除法、取餘數 | 左至右 |
| 4 | + - | 加法、減法 | 左至右 |
| 5 | << >> >>> | 左移、有號右移、無號右移 | 左至右 |
| 6 | < <= > >= instanceof | 關係比較、型別檢查 | 左至右 |
| 7 | == != | 相等、不相等比較 | 左至右 |
| 8 | & | 位元 AND | 左至右 |
| 9 | ^ | 位元 XOR | 左至右 |
| 10 | | | 位元 OR | 左至右 |
| 11 | && | 邏輯 AND(短路) | 左至右 |
| 12 | || | 邏輯 OR(短路) | 左至右 |
| 13 | ? : | 三元條件運算子 | 右至左 |
| 14 | = += -= *= /= %= &= |= ^= ~=<<= >>= >>>= | 指派與複合指派 | 右至左 |
3 + -4 解析為 3 + (-4),負號先與 4 結合+ -)vs 加減法;位元 AND(&)vs 邏輯 AND(&&)int m = 12;
// 不佳:依賴優先順序(<< 高於 +)
int n = m << 1 + 2; // 實際執行 m << (1+2) = m << 3
// 建議:明確使用括號
int n = m << (1 + 2); // 意圖清晰,易讀易維護
掌握運算子優先順序是 Java 開發者的基本功,但善用括號表達明確意圖,才是專業工程師的成熟表現。讓程式碼自我說明,減少後續維護者的認知負擔。