每日一題系列,考察 Java 基礎語法陷阱:布爾變量在 if 條件中使用賦值表達式的行為與輸出結果。
public class DailyQuestion {
public static void main(String[] args) {
boolean flag = false;
if (flag = true) { // 注意:這是賦值,不是比較!
System.out.println("true");
} else {
System.out.println("false");
}
}
}
flag = true 是合法的賦值表達式,其值為賦值結果 true,類型為 boolean,滿足 if 要求。flag = falseflag = true,賦值成功,表達式值為 truetrue,進入 if 分支trueflag 變為 truetrue| 概念 | 說明 |
|---|---|
| 賦值表達式有值 | Java 中賦值表達式的值為賦值後的值,如 a = 5 的值為 5 |
| if 條件要求 boolean | if (expression) 中 expression 必須是 boolean 類型或 Boolean 對象 |
| = vs == | = 賦值,== 比較。此題若寫 flag == true 則不修改 flag,條件為 false,輸出 false |
| 編碼規範 | 嚴禁在條件判斷中使用賦值,極易導致邏輯錯誤。推薦:if (flag)、if (!flag)、if (flag == true) |
// 陷阱 1: 鏈式賦值
int a, b, c;
if ((a = b = c = 3) > 0) { ... } // 合法但極難讀
// 陷阱 2: 方法調用副作用
if (list.add(element)) { ... } // add 返回 true,但副作用隱藏在條件中
// 陷阱 3: 包裝類自動拆箱 NPE
Boolean flag = null;
if (flag) { ... } // 拋出 NullPointerException
if (flag) / if (!flag)Assignment in conditional expression (IntelliJ 默認警告)= 符號