EL表达式中的char比较

Dom*_*ski 6 java comparison jsp el char

我想做这样的事情:

<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>
Run Code Online (Sandbox Code Playgroud)

当somestring是"11011"但它不起作用.我可以打印出来

${somestring.charAt(0)}
Run Code Online (Sandbox Code Playgroud)

并且它是'1'但是上面的比较失败了.以下比较:

if(somestring.charAt(0)=='1')
Run Code Online (Sandbox Code Playgroud)

纯Java中的worx(条件为真).

有任何想法吗?

ric*_*ckz 8

EL似乎有问题.这是我能让它发挥作用的唯一方法.

<c:if test="${somestring.charAt(0)  == '1'.charAt(0)}" >
     tadaaaam
</c:if>
Run Code Online (Sandbox Code Playgroud)


Mar*_*mas 7

行为完全符合预期和EL规范的要求.如果您采用EL规范的2.2版,则需要查看1.8.2节,其中提供了'=='运算符的规则.

在这种情况下,操作数somestring.charAt(0)是a char并且'1'String(不是char),因为字符串可以由EL中的单引号或双引号分隔.

鉴于我们有Character == String,那么1.8.2的第六个子弹适用,并且两者都被强制为Long值.该字符将被强制为49(ASCII代码为1),1被强制为1.这些不相等,因此您看到的结果.

我明白这不是你所期望的,但它是规范所要求的行为,并且是由EL中的单引号划分字符串而不是字符的事实引发的.