Boolean flag; // 包裝類型,預設 null
if (flag)
i = 1;
else
i = 2;
| flag 值 | if 判斷結果 | i 最终值 | 備註 |
|---|---|---|---|
true | 真 | 1 | 自動拆箱為 true |
false | 假 | 2 | 自動拆箱為 false |
null | 拋出 NullPointerException | — | ⚠️ 關鍵陷阱:拆箱 null 會崩潰 |
// 編譯器轉換後等價於
if (flag.booleanValue()) // 若 flag 為 null → NPE
if (Boolean.TRUE.equals(flag)) { // null 安全,回傳 false
i = 1;
} else {
i = 2;
}
i = (flag != null && flag) ? 1 : 2;
boolean flag; // 預設 false,無 null 問題
// ...
if (flag) i = 1; else i = 2;
if (1) 編譯錯誤,必須 if (flag) 或 if (count > 0)。0, null, undefined, '', NaN 為 falsy,其餘 truthy。使用 Boolean 包裝類時務必處理 null,否則運行時拋 NPE。優先使用基本型別 boolean,或用 Boolean.TRUE.equals() 安全判斷。