应根据业务语义选择:需忽略空白字符时用isBlank(),仅判断长度时用isEmpty();注意JDK版本支持(isBlank()为JDK11+新增)及null安全性(二者均不处理null)。

isBlank 判断字符串是否“全为空白字符”(包括空格、制表符、换行符等),isEmpty 只判断长度是否为 0。选哪个,取决于你对“空”的定义。
看业务语义:要不要忽略空白字符
如果用户输入了一个全是空格的文本框(比如" "或"\t\n"),你认为这算“没填”,就该用 isBlank();如果只关心有没有字符(哪怕只有空格也算有内容),才用 isEmpty()。
-
" ".isEmpty()→false(有 3 个空格) -
" ".isBlank()→true(全是空白) -
"".isEmpty()和"".isBlank()都是true
注意 JDK 版本支持
String.isBlank() 是 JDK 11 新增的方法,JDK 8 及更早版本不支持。如果项目还在用 JDK 8,要么升级 JDK,要么用 StringUtils.isBlank()(Apache Commons Lang)替代。
- JDK 11+:直接用
str.isBlank() - JDK 8:推荐
StringUtils.isBlank(str)(比str == null || str.trim().isEmpty()更安全) - 避免手写
str != null && !str.trim().isEmpty(),容易漏判 null
null 安全性要单独处理
两个方法都不支持 null —— 调用 null.isBlank() 或 null.isEmpty() 都会抛 NullPointerException。
立即学习“Java免费学习笔记(深入)”;
- 正确写法:
str != null && str.isBlank() - 或者用
Objects.toString(str, "").isBlank()把 null 转成空串再判 - Apache Commons 的
StringUtils.isBlank(str)本身已处理 null,更省心
性能差异几乎可忽略
isEmpty() 是纯长度判断,O(1);isBlank() 需遍历每个字符检查是否为 Unicode 空白(如 ' '、'\t'、'\u2000' 等),最坏 O(n)。但日常字符串很短,实际耗时差别在纳秒级,不用为此选方法。
- 别为了“快一点”放弃语义准确性
- 真有高频超长字符串场景(如解析日志块),再结合具体 case 做优化


















