| 類別 | 運算符 | 優先級(高→低) |
|---|---|---|
| 後綴 | expr++ expr-- | 1 |
| 一元 | ++expr --expr +expr -expr ~ ! | 2 |
| 乘除 | * / % | 3 |
| 加減 | + - | 4 |
| 位移 | << >> >>> | 5 |
| 關係 | < > <= >= instanceof | 6 |
| 相等 | == != | 7 |
| 位與 | & | 8 |
| 位異或 | ^ | 9 |
| 位或 | | | 10 |
| 邏輯與 | && | 11 |
| 邏輯或 | || | 12 |
| 三元 | ? : | 13 |
| 賦值 | = += -= *= /= %= &= ^= |= <<= >>= >>>= | 14 |
short s = 1;
s = s + 1; // ❌ 編譯錯誤:int 無法賦值給 short
s += 1; // ✅ 隱含強轉:s = (short)(s + 1)
規則:+= -= *= /= 等擴展賦值運算符隱含強制類型轉換。
int a = 5, b = 2;
double d = a / b; // 2.0 (先整除再轉)
double d2 = a * 1.0 / b; // 2.5 (提升為浮點運算)
if (false && method()) {} // method() 不執行
if (false & method()) {} // method() 執行
// 同理:true || ... 短路,true | ... 不短路
| 操作 | 位運算寫法 | 等價算術 |
|---|---|---|
| 乘 2^n | x << n | x * (1 << n) |
| 除 2^n (向下取整) | x >> n | x / (1 << n) |
| 判斷奇偶 | (x & 1) == 1 | x % 2 != 0 |
| 交換兩數 (無臨時變數) | a ^= b; b ^= a; a ^= b; | -- |
| 取模 2^n | x & ((1 << n) - 1) | x % (1 << n) |
面試題:最高效計算 2 * 8 → 2 << 3 (16)
// ❌ 難讀
int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
// ✅ 清晰
int maxAB = a > b ? a : b;
int max = maxAB > c ? maxAB : c;
// ✅ Java 8+ Stream
int max = IntStream.of(a, b, c).max().getAsInt();
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
String s = sc.nextLine(); // 讀整行
sc.close();
Java 運算符看似基礎,實則暗藏精密的類型提升、隱式轉換、短路邏輯、位運算技巧。掌握優先級表、short/byte 陷阱、&&/|| 短路、位運算高效寫法、三元運算符可讀性原則,是寫出正確、高效、可維護代碼的基石。