方法體實現業務邏輯的基石是運算符與流程控制。本文系統梳理 Java 四大類運算符優先級、陷阱與最佳實踐,並講解三大流程結構(順序、分支、循環)的語法細節與標籤跳轉技巧。
+ - * / % ++ --/整數相除截斷小數,%取餘可判斷奇偶i++ 返回舊值再加,++i 先加再返回舊值+1;副作用相同,返回值不同+ 兼任字符串連接:"Hello" + "World" → "HelloWorld"& | ^ ~ << >> >>> 作用於二進制位& 同為1得1,| 有1得1,^ 不同得1,~ 取反<< n ≡ ×2ⁿ(低位補0);右移分有符號 >>(符號位擴展)與無符號 >>>(高位補0)> < >= <= == != 僅用於基本類型比較== != 可用於引用類型,比較地址值而非內容equals()true/false,1/0 僅為二進制非邏輯值& | ^ !:全評估,雙方均執行&& ||:短路,左側決定結果時右側不執行(false && ...、true || ...)if (obj != null && obj.method())if (x == 1) { ... } else { ... } // 條件必須是 boolean 表達式
switch (y) { // y 類型:byte/short/int/char/enum (Java 5+)
case 1: ...; break;
case 2: ...; // 缺失 break → 貫穿執行 case 3
case 3: ...; break;
default: ...;
}
關鍵點:case 只是入口,break 決定出口。enum 類型增強類型安全。
for (int i=0; i<3; i++) { ... } // 計數循環首選
while (x > 0) { ...; x--; } // 先判斷後執行,可能零次
do { ...; y--; } while (y > 0); // 先執行後判斷,至少一次
loop1: for (int i=0; i<4; i++) {
loop2: for (int j=0; j<3; j++) {
if (i == j) break; // 跳出 loop2
if (i < j) continue loop1; // 直接進入 loop1 下一輪
System.out.println("i=" + i + " j=" + j);
}
}
輸出:(1,0) (2,0) (2,1) (3,0) (3,1) (3,2)。
規則:break/continue 后無標籤 → 最近一層;有標籤 → 指定標籤層。
| 誤區 | 正確做法 |
|---|---|
字符串用 == 比較 | 用 equals() 或 Objects.equals() |
| 整數除法丟失精度 | 先轉 double 或用 BigDecimal |
switch 忘寫 break | 刻意貫穿加註釋,或改用 if-else |
| 循環條件寫錯導致死循環 | 優先用 for-each 或 Stream 避免手寫索引 |