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

Java if-else 條件語句完全指南:語法、巢狀結構、三元運算符與模式匹配

     編輯:Java 相關知識

if 語句基礎語法

if 是 Java 控制流的基石,根據布爾表達式決定是否執行代碼塊。


// 單行語句可省略大括號 (不推薦,易出錯)
if (score >= 60) System.out.println("及格");

// 標準寫法:始終使用大括號
if (score >= 60) {
    System.out.println("及格");
    System.out.println("繼續努力");
}

if-else 雙分支


int age = 17;
if (age >= 18) {
    System.out.println("成年人");
} else {
    System.out.println("未成年人");
}

if-else if-else 多重分支


int score = 85;
if (score >= 90) {
    System.out.println("優秀");
} else if (score >= 80) {
    System.out.println("良好");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}
// 執行流程:自上而下判斷,匹配第一個 true 執行對應塊,其餘跳過

巢狀 if 結構


boolean hasTicket = true;
boolean isVip = false;

if (hasTicket) {
    if (isVip) {
        System.out.println("VIP 通道入場");
    } else {
        System.out.println("普通通道入場");
    }
} else {
    System.out.println("請購票");
}

// 建議:扁平化邏輯,使用邏輯運算符
if (hasTicket && isVip) { ... }
else if (hasTicket) { ... }
else { ... }

三元運算符 (條件運算符) ? :

表達式形式,可賦值給變量,適合簡單雙分支。


int a = 10, b = 20;
int max = (a > b) ? a : b; // 返回 a 或 b 中較大值

String status = (age >= 18) ? "成年" : "未成年";
// 等價於:
// String status;
// if (age >= 18) status = "成年"; else status = "未成年";

實戰示例:模擬辦公室查人


public class OfficeDemo {
    public static void main(String[] args) {
        // 模擬:黃文強在不在?
        boolean huangInOffice = false; // 今天不在
        
        System.out.println("=== 開始查詢 ===");
        if (huangInOffice) {
            System.out.println("回覆:在工位上");
        } else {
            System.out.println("回覆:他不在(熱心同事代答)");
        }
        System.out.println("=== 查詢結束 ===");
    }
}

進階特性:JDK 14+ 模式匹配 instanceof (預覽)


Object obj = "Hello Java 17";

// 傳統寫法
if (obj instanceof String) {
    String s = (String) obj; // 需要強轉
    System.out.println(s.length());
}

// 模式匹配 (JDK 16 正式)
if (obj instanceof String s) { // 直接聲明並賦值模式變量
    System.out.println(s.length());
}

// 結合 switch 表達式 (JDK 17+)
String result = switch (obj) {
    case String s -> "字符串長度: " + s.length();
    case Integer i -> "整數值: " + i;
    case null -> "空值";
    default -> "其他類型: " + obj.getClass().getSimpleName();
};
System.out.println(result);

最佳實踐與避坑指南

原則說明反例正例
始終用大括號防止維護時漏加語句導致邏輯錯誤if(x>0) doA(); doB();if(x>0){doA();} doB();
條件順序優化把最可能 true/false、計算最廉價的條件放前面 (短路求值)if(expensive() && simple())if(simple() && expensive())
避免深層巢狀超過 3 層提取方法、用衛語句、狀態模式4+ 層 if-else提取方法、Guard Clauses
布爾變量命名用 is/has/can/should 開頭,正向語義boolean notReady = false;boolean isReady = true;
== true/false絕不寫 if(flag == true)if(isValid == true)if(isValid)
浮點數比較絕不直接 ==,用誤差範圍if(d == 0.3)if(Math.abs(d - 0.3) < 1e-9)

常見錯誤示例


// 錯誤 1: 單個 = 賦值而非比較
if (x = 5) { ... } // 編譯錯誤 (int 不能轉 boolean),但 boolean 類型會誤賦值!
boolean flag = false;
if (flag = true) { ... } // 永遠為 true!正確: if (flag)

// 錯誤 2: 分號吞噬 if
if (x > 0); { // if 體為空語句,大括號塊無條件執行
    System.out.println("錯誤執行");
}

// 錯誤 3: 字符串用 == 比較內容
String s1 = new String("a");
String s2 = new String("a");
if (s1 == s2) { ... } // false! 比較引用。正確: s1.equals(s2)

總結

if-else 是程序決策的核心。掌握 基礎語法、多重分支順序、三元運算符表達式、模式匹配現代語法、衛語句扁平化、短路求值優化,並堅守 大括號原則、布爾命名規範、浮點比較容差,即能寫出清晰、高效、可維護的條件邏輯。隨著 JDK 17+ 模式匹配成熟,複雜類型判斷將更加優雅。

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