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

Java 流程控制核心:if-else 與 switch 語句完整詳解與最佳實踐

     編輯:Java 相關知識

Java 選擇結構深度解析:if-else 與 switch 全面掌握

選擇結構是程式邏輯分支的核心。本文系統講解 if 三種形式、switch 語法規則、執行流程、常見陷阱,並給出場景化選擇建議。

一、if 語句三種形式

1. 單分支 if

if (關係表達式) {
    語句體;
}
  • 表達式結果必須為 boolean 型
  • 語句體單行可省略大括號,強烈建議保留
  • 流程:true → 執行語句體 → 繼續;false → 跳過語句體 → 繼續

2. 雙分支 if-else

if (關係表達式) {
    語句體1;
} else {
    語句體2;
}
  • 二選一執行,無第三種可能
  • 與三元運算符 condition ? expr1 : expr2 邏輯等價,但三元運算符要求有返回值,不能用於單純輸出語句

3. 多分支 if-else if-else

if (表達式1) {
    語句體1;
} else if (表達式2) {
    語句體2;
} ...
else {
    語句體N;
}
  • 自上而下判斷,只執行第一個匹配的分支
  • 最終 else 為兜底,可省略 (但不建議)
  • 巢狀 if 可實現複雜邏輯 (如求三數最大值)

二、switch 語句完整規範

語法結構

switch (表達式) {
    case 值1:
        語句體1;
        break;
    case 值2:
        語句體2;
        break;
    ...
    default:
        語句體N;
        break;
}

表達式類型演進 (重點考點)

JDK 版本支援類型
JDK 1.0-1.4byte, short, int, char
JDK 5 (1.5)+ enum (枚舉)
JDK 7 (1.7)+ String

不支援:long, float, double, boolean, 物件引用 (除 String/enum)

關鍵規則與陷阱

  1. case 值必須為常量,不能是變量;同一 switch 內 case 值不可重複
  2. break 可省略,但會導致 case 穿透 (繼續執行下一 case),通常為 Bug
  3. default 位置任意,不必在最後;但習慣置尾
  4. 結束條件:遇到 break、或執行到 switch 結尾

三、if vs switch 選擇決策表

場景推薦理由
布林條件判斷ifswitch 不支援 boolean
區間/範圍判斷ifswitch 只能匹配離散值
少量離散常量值switch編譯器優化為跳躍表,效能優於 if 鏈
String/Enum 匹配switch語意清晰,JDK 7+ 優化 String hash 比較
複雜複合條件ifswitch 無法表達 &&、|| 組合

四、經典面試陷阱題

陷阱 1:賦值 vs 比較

int a = 1, b = 2;
if (a = b) { ... } // 編譯錯誤:int 不能當 boolean
boolean x = true, y = false;
if (x = y) { ... } // 編譯通過!將 y 賦值給 x,再判斷 x 值 (false)

陷阱 2:switch 穿透行為

int day = 2;
switch (day) {
    case 1: System.out.print("Mon ");
    case 2: System.out.print("Tue ");
    case 3: System.out.print("Wed ");
    default: System.out.print("Other");
}
// 輸出:Tue Wed Other  (無 break 導致穿透)

陷阱 3:三元運算符副作用

// 錯誤:System.out.println 無返回值,不能作為三元運算元
int score = 80;
(score > 60) ? System.out.println("Pass") : System.out.println("Fail"); // 編譯錯誤

// 正確:用 if-else 或有返回值的表達式
String result = (score > 60) ? "Pass" : "Fail";

五、最佳實踐總結

  1. 優先使用 if-else 處理布林邏輯、區間判斷
  2. 離散常量匹配 (尤其是 String/Enum) 優先 switch
  3. 永遠加大括號,即使單行語句
  4. switch 必加 break,必要時加註釋說明故意穿透
  5. 避免過深巢狀 (超過 3 層),提取方法或用衛語句簡化

精通選擇結構的細節差異,能寫出更清晰、高效、少 Bug 的分支邏輯代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved