在进行比较时 memberOf和contains Of 进行比较时操作两边的值类型要相同,如下:
36 memberOf ["24","36"] false
36 memberOf [24,36] true
"36" memberOf [24,36] false
"36" memberOf ["24","36"] true
强制转换
当两个不同类型且没有可比性的值进行比较时,需要将右边的值强制转换成左边的值的类型时,MVEL会应用类型强制转换系统,反之亦然。
约束条件的比较过程中是会进行强制类型转换的,比如在数据计算中传入字符串“10”,则能成功转换成数字10进行计算。但如果,此时传入的值无法进行转换,比如传了“ten”,那么将会抛出异常。
当使用在String字符串的比较时,则按照字母顺序进行排序。
相同类型 map.put("crate","26"); 规则配置:get("crate")<"3" 返回true 比较对应字符的大小(ASCII码顺序) compareTo 如果小于返回负数
相同类型 map.put("crate",26); 规则配置:get("crate")<3 返回false
不同类型 map.put("crate","26"); 规则配置:get("crate")<3 返回false 不同类型但是值具有可比性 按数字进行比较
不同类型 map.put("crate",26); 规则配置:get("crate")<"3" 返回false 不同类型但是值具有可比性 按数字进行比较
---------------------------------------------------------------------------------------------------------------------------
相同类型 map.put("crate","26"); 规则配置:get("crate")<"a" 返回true 比较对应字符的大小(ASCII码顺序)
不同类型 map.put("crate","a"); 规则配置:get("crate")<3 报错 值类型不同又没有可比性会发生强制转换 java.lang.Integer cannot be cast to java.lang.String
如下代码:Integer a = 3; String aStr = (String)a; 此时编译器报强转异常