加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JSP比较运算符行为

发布时间:2020-12-15 03:09:17 所属栏目:Java 来源:网络整理
导读:我想比较 c:if中的两种不同类型JSP的标签.基本上左边的一个是Number总是但是右边的一个是字符串,如果那个字符串可以解析为一个数字我收不到错误但是如果字符串不能被解析为一个数字我收到 javax.el.E??LException:无法转换否类型java.lang.String类java.la
我想比较< c:if>中的两种不同类型JSP的标签.基本上左边的一个是Number总是但是右边的一个是字符串,如果那个字符串可以解析为一个数字我收不到错误但是如果字符串不能被解析为一个数字我收到 javax.el.E??LException:无法转换否类型java.lang.String类java.lang.Long.

几乎:

${1 ==”” } //works fine
${1 ==”4″ } //works fine
${1 ==”Yes” }
//triggers the Exception.

但即便是第3次比较在以前版本的JSP中也能正常工作,但现在它会导致异常.

==的行为是否在一段时间内发生了变化?

任何建议都非常感谢

解决方法

==的行为不会改变,但{expr}的行为会发生变化……

关于版本:

在JSP Specification,的向后兼容部分

If the version speci?ed is less than 2.1,then the {expr} syntax is
simply processed as a String literal.

因此,直到EL 2.0所有将被视为字符串文字并与.equals进行比较,因为==将在内部转换为等于(Reference here),但在2.1中它将不会转换为字符串并将抛出异常说javax.el .ELException:无法将类型java.lang.String的类型转换为类java.lang.Long

关于比较:

在EL版本2.1的JSP specification JSP.2.3.5.7中,指定了以下内容……

  1. If A is null or B is null return false for == or eq,true for != or ne

  2. If A or B is Byte,Short,Character,Integer,or Long coerce both A
    and B to Long,apply operator

所以,在第一种情况下,

${1 =="" } // ans is false as second one is null as per 1st rule.

在第二种情况下,

${1 =="4" } // ans is false as both are different after coercing to Long as per 2nd rule.

在上述情况下,两者都将被强制转换为内部类型转换.

但不是在第三种情况下,${1 ==“是”}其中第二个是字符串无法转换(强制)为Long而java.el.E??LException将抛出消息“无法将类型类java.lang.String转换为类java. lang.Long”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读