7.5.3 关系运算符

优质
小牛编辑
143浏览
2023-12-01

关系运算符用于返回两个操作数的关系。关系运算符的两边可以是各种常量、变量或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 关系运算符的应用举例