在 JSP 中使用 EL 表達式 ${entity.status == '1'} 比較 char 型別屬性時,常發生預期 true 卻得到 false 的情況。根因在於 EL 會自動將 char 轉為其 ASCII 整數值('1' → 49),導致比較變成 ${49 == '1'},結果自然為假。
// 實體類
public class Entity {
private char status = '1';
// getter/setter
}
// JSP
${entity.status == '1'} // 結果:false
'1'.charAt(0) 產生 char 值比較:
${entity.status == '1'.charAt(0)}
EL 表達式語言規範(JSR-341)定義強制轉型規則:char、Character 會被轉為 int 進行數值比較。此行為與 Java 語言中 char 自動提升為 int 一致,但在視圖層比較字元常造成困惑。