在 MyBatis 的 <if> 标签中,表达式 isDeduc != null and isDeduc == 0 是基于 OGNL (Object-Graph Navigation Language) 表达式进行解析的。OGNL 在处理不同类型的数据时会进行隐式类型转换,这就可能导致一些看似不合理的判断结果。 为什么 isDeduc 是空字符串时,表达式依然为 true? 1. OGNL 的类型转换规则 OGNL 在处理表达式时,如果字段类型不匹配,会尝试进行隐式类型转换。例如: 如果 isDeduc 是字符串类型 (String),但表达式中使用了 isDeduc == 0,OGNL 会尝试将字符串转换为数字。 空字符串 ("") 在转换为数字时,会被解析为 0。 2. 示例分析 假设 isDeduc 的值是空字符串 (""),表达式 isDeduc != null and isDeduc == 0 的执行过程如下: isDeduc != null:空字符串 ("") 是一个有效的字符串对象,不为 null,所以条件为 true。 isDeduc == 0:由于 isD.... 天天帮领导改bug之空字符串和0 帮领导改bug