isEmpty()仅判断长度是否为0,isBlank()判断是否为空或全为Unicode空白字符;二者均需先判null防NPE,且isBlank()仅Java 11+支持。

直接看业务要判断什么——是“长度为 0”,还是“视觉上没内容”。isEmpty 只认长度,isBlank 认的是语义上的“空”。
核心区别一句话说清
isEmpty():只要 length() == 0 就返回 true,哪怕字符串里全是空格、制表符、换行符,它也认为“不空”。
isBlank():只要字符串是空的(""),或者只含空白字符(如 " "、"\t\n"、"\u2000" 等 Unicode 空白),就返回 true。
-
"".isEmpty()→true,"".isBlank()→true -
" ".isEmpty()→false(长度是 1)," ".isBlank()→true -
"\t\n\r".isEmpty()→false,"\t\n\r".isBlank()→true -
"a ".isEmpty()→false,"a ".isBlank()→false(含非空白字符)
什么时候该用哪个?
选法不靠记忆,靠场景:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 表单校验“用户名不能为空” → 用
!str.isBlank()。防用户输一堆空格提交 - 协议字段约定必须是
""才代表缺失 → 用str.isEmpty(),保证严格匹配 - Map 的 key 明确要求不能有字符(连空格都不行)→ 用
str.isEmpty() - 日志或配置项允许“留空或全空白”都算未设置 → 用
str.isBlank()
别忘了 null 安全这一步
两个方法都不处理 null,直接调用会抛 NullPointerException:
立即学习“Java免费学习笔记(深入)”;
- 错:
str.isEmpty()或str.isBlank()(当str可能为null) - 对:
str != null && str.isEmpty() - 对:
str != null && str.isBlank() - 更简洁:
Objects.toString(str, "").isBlank()(把null统一转成空串再判)
版本和替代方案
isBlank() 是 JDK 11+ 新增的,JDK 8 项目不能直接用:
- 升级 JDK 是最彻底的解法
- 用 Apache Commons Lang:
StringUtils.isBlank(str)(它本身已处理null,更省心) - 手写替代(不推荐):
str == null || str.trim().isEmpty(),但trim()不识别部分 Unicode 空白(如\u2000),且会新建字符串

















