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

Java 每日一題:布爾賦值陷阱與 if 條件判斷機制

     編輯:Java 相關知識

每日一題系列,考察 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");
        }
    }
}

問題分析

  1. 能否編譯? 能。flag = true 是合法的賦值表達式,其值為賦值結果 true,類型為 boolean,滿足 if 要求。
  2. 執行流程:
    • 初始 flag = false
    • 執行 flag = true,賦值成功,表達式值為 true
    • if 判斷條件為 true,進入 if 分支
    • 輸出 true
    • 最終 flag 變為 true
  3. 輸出結果:true

核心知識點

概念說明
賦值表達式有值Java 中賦值表達式的值為賦值後的值,如 a = 5 的值為 5
if 條件要求 booleanif (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

最佳實踐

  1. 條件判斷只做判斷,不做賦值、不調用有副作用方法
  2. 布爾變量直接寫 if (flag) / if (!flag)
  3. 啟用 IDE 檢查:Assignment in conditional expression (IntelliJ 默認警告)
  4. Code Review 重點關注 if/while/for 條件中的 = 符號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved