深色模式
空字面量
空字面量 null 也可直接使用,常用于判断变量/属性是否为空,是 Thymeleaf 中处理空值的核心语法。
html
<div th:if="${variable.something} == null">
当 variable.something 为空时显示此内容
</div>核心逻辑解释
空值判断的场景:
null字面量用于检测变量、对象属性或表达式结果是否为null,常见场景包括:- 判断上下文变量是否为空:
${user} == null(检查控制器是否传入user变量); - 判断对象属性是否为空:
${user.name} == null(检查user对象的name属性是否为null); - 结合默认值运算符简化逻辑:
${user.name} ?: '匿名用户'(等价于user.name == null ? '匿名用户' : user.name)。
- 判断上下文变量是否为空:
写法灵活性: 和布尔字面量类似,空值判断也可写在
${}表达式内部(由 OGNL/SpringEL 处理),效果完全一致:html<!-- 等价写法:null 判断写在表达式内 --> <div th:if="${variable.something == null}"> 空值时显示的内容 </div>与空字符串的区别:
null表示“变量/属性不存在”,而空字符串''表示“存在但内容为空”,二者不可混淆:html<!-- 判断是否为 null(不存在) --> <div th:if="${user.name} == null">姓名未设置</div> <!-- 判断是否为空字符串(存在但无内容) --> <div th:if="${user.name} == ''">姓名为空字符串</div> <!-- 同时判断 null 和空字符串(推荐用工具对象) --> <div th:if="${#strings.isEmpty(user.name)}">姓名为空(null 或空字符串)</div>
关键注意事项
null字面量无需加单引号:加单引号会被解析为文本"null",而非空值,导致判断失效: ❌ 错误:th:if="${user.name} == 'null'"(仅当user.name是字符串"null"时才成立,而非真正的null); ✅ 正确:th:if="${user.name} == null"(判断真正的空值)。- 避免空指针异常: 若
variable本身为null,${variable.something}会抛出空指针异常,需先判断variable是否为空:html<!-- 安全写法:先判断 variable 非空,再判断 something 为空 --> <div th:if="${variable != null && variable.something == null}"> variable 存在但 something 为空 </div>
总结
- 空字面量
null用于判断变量/属性是否为空,无需包裹符号,直接与表达式比较; null判断可写在${}内部或外部,效果等价,复杂场景推荐写在内部;- 区分
null(不存在)和空字符串''(存在但无内容),复杂空值判断推荐使用#strings.isEmpty()工具方法; - 避免直接访问可能为
null的对象的属性,防止空指针异常。
