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(含非空白字符)
什么时候该用哪个?
选法不靠记忆,靠场景:
- 表单校验“用户名不能为空” → 用
!str.isBlank()。防用户输一堆空格提交 - 协议字段约定必须是
""才代表缺失 → 用str.isEmpty(),保证严格匹配 - Map 的 key 明确要求不能有字符(连空格都不行)→ 用
str.isEmpty() - 日志或配置项允许“留空或全空白”都算未设置 → 用
str.isBlank()
别忘了 null 安全这一步
两个方法都不处理 null,直接调用会抛 NullPointerException:
- 错:
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),且会新建字符串
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











