7.5.3 关系运算符
关系运算符用于返回两个操作数的关系。关系运算符的两边可以是各种常量、变量或EL表达式,所有的关系运算符的执行结果都是布尔类型。关系运算符分为如下六组:
l ==(eq):等于
2 !=(ne):不等于
3 <(lt):小于
4 >(gt):大于
5 <=(le):小于等于
6 >=(ge):大于等于
在使用关系运算符时需要注意以下几点:
7 如果“==(eq)”和“!=(ne)”运算符的两个操作数中有一个是布尔类型,EL引擎会将另一个操作数转换为布尔类型再进行比较。例如,${true == "True"}输出true,${ true == "a"}输出false。
8 如果“==(eq)”和“!=(ne)”运算符的两个操作数中有一个是枚举类型,EL引擎会将另一个操作数转换为枚举类型再进行比较。例如,${"SPRING" == season}输出true,其中season是一个域对象,类型是枚举类型,“SPRING”是枚举类型的一个值。
9 如果“==(eq)”和“!=(ne)”运算符的两个操作数中有一个是字符串类型,EL引擎会将另一个操作数转换为字符串类型再进行比较。例如,${6 == "6"}输出true,${5 == "ab"}输出false。
l0 上面三种情况优先级依次降低。也就是说,如果两个操作数分别是布尔类型和枚举类型,则将枚举类型转换成布尔类型,而不是将布尔类型转换成枚举类型。
l1 如果“<(lt)”、“>(gt)”、“<=(le)”和“>=(ge)”运算符两边的操作数中的一个是数字,另一个是字符串,EL引擎会将字符串转换成数字,再进行比较。例如,${5 < "32"}输出true,如果字符串无法转换成数字,则在执行EL表达式时会抛出异常。
l2 如果无法进行类型转换,例如,字符串"a"无法转换成数字类型,则会抛出异常。
l3 关系运算符在比较两个字符串时,是按着ASCII进行比较的,也就是说,在比较的过程中对大小写敏感。例如,${"a" > "ab"}输出false;${"a" == "A"}输出false;${"ab" > "Ac"}输出true。
l4 如果“==(eq)”运算符的两个操作数中有一个是null,则返回false。例如,${null eq "abc"}输出false。
l5 如果“!=(ne)”运算符的两个操作数中有一个是null,则返回true。例如,${null != "xyz"}输出true。
l6 如果“<(lt)”、“>(gt)”、“<=(le)”和“>=(ge)”运算符两边的操作数中有一个是null,则返回false。例如,${null <= 4}和${null gt "ok"}都输出false。
l7 为了避免和JSP标签产生冲突,在使用后四个运算符时通常使用括号内的形式。例如,${4 lt abc}、${"xyz" ge 55}等。
l8 如果使用关系运算符括号内的形式,操作数和关系运算符之间至少得有一个空格、tab等字符。
l9 这6个算术运算符括号内的形式区分大小写。例如,不能写成${4 EQ 5},否则抛出异常。
表7.3是上述6个关系运算符的应用举例。
关系运算符 | 执行结果 | 关系运算符 | 执行结果 |
${4 > 3} | true | ${(3 + 2) ge "43"} | false |
${true == "True"} | true | ${5.5 le 3} | false |
${"a" lt "4"} | false | ${4 > "a"} | 抛出异常 |
表7.3 关系运算符的应用举例