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(条件为真).
有任何想法吗?
EL似乎有问题.这是我能让它发挥作用的唯一方法.
<c:if test="${somestring.charAt(0) == '1'.charAt(0)}" >
tadaaaam
</c:if>
Run Code Online (Sandbox Code Playgroud)
行为完全符合预期和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中的单引号划分字符串而不是字符的事实引发的.
| 归档时间: |
|
| 查看次数: |
4158 次 |
| 最近记录: |