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

EL 表達式比較 char 型別的陷阱與解決方案

     編輯:Java 綜合教學

EL 表達式比較 char 型別的陷阱與解決方案

在 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. 建議:將實體屬性改為 String 型別,從源頭避免型別轉換問題。
  2. 替代方案:在 EL 中使用 '1'.charAt(0) 產生 char 值比較:
    ${entity.status == '1'.charAt(0)}

原理補充

EL 表達式語言規範(JSR-341)定義強制轉型規則:char、Character 會被轉為 int 進行數值比較。此行為與 Java 語言中 char 自動提升為 int 一致,但在視圖層比較字元常造成困惑。

參考討論:StackOverflow: char comparison in EL expression

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