一尘不染

比较表达式语言中的字符串和布尔值

jsp

我有这种行为,我不太了解

${someVar}
${someVar.class.name}      
${someVar == 'error'}

输出

false
java.lang.Boolean
true
  1. 怎么可以解释呢?
  2. 为了首先测试两个“事物”是否具有相同的类型,然后它们的值是否相同,编写测试的正确方法是什么?

阅读 313

收藏
2020-06-08

共1个答案

一尘不染

这是EL规范中定义的语言的行为:

A {==,!=,eq,ne} B

  • 遗漏了其他规则
  • 如果A或B为布尔值,则将A和B都强制转换为布尔值,则应用运算符

将A强制转换为布尔

  • 如果A为null或“”,则返回false
  • 否则,如果A为布尔值,则返回A
  • 否则, 如果A是一个字符串,并且Boolean.valueOf(A)没有引发异常,则将其返回
  • 否则,错误

因此,该字符串是强制转换为布尔通过Boolean.valueOf("error")返回false

2020-06-08