isEmpty()仅判断长度是否为0,等价于length()==0;isBlank()(Java 11+)判断是否为空或全为Unicode空白字符,语义更严格。二者均需先判null防NPE。
string.isempty() 判断字符串长度是否为 0,只关心“有没有字符”;string.isblank()(java 11+)判断字符串是否“视觉上不可见”,即是否只包含空白字符(如空格、制表符、换行符等)或为空。
isEmpty():只看长度,不看内容
它等价于 str.length() == 0,非常轻量。只要字符串对象存在且长度为 0,就返回 true;哪怕字符串是 " "(一个空格)或 "\t\n",也返回 false。
-
"".isEmpty()→true -
" ".isEmpty()→false -
"\n\t".isEmpty()→false -
null.isEmpty()→ 编译错误(必须先判空)
isBlank():语义更贴近“真正没内容”
这是 Java 11 引入的实用方法,内部调用 chars().allMatch(Character::isWhitespace)。它把空字符串和纯空白字符串都视为“空白”,统一返回 true。
-
"".isBlank()→true -
" ".isBlank()→true -
"\t\n\r\u00A0".isBlank()→true(支持 Unicode 空白符,如不间断空格) -
"a".isBlank()→false -
null.isBlank()→ 编译错误(同样需先判空)
实际使用建议
避免 NPE 是前提:两个方法都不能直接作用于 null。推荐写法:
- 判空字符串:
str != null && str.isEmpty() - 判空白(含空字符串):
str != null && str.isBlank() - 若需兼容旧版 Java(str != null && str.trim().length() == 0 模拟
isBlank(),但注意trim()会创建新字符串,且不识别部分 Unicode 空白符(如\u2000)
什么时候选哪个?
看业务语义:
- 表单校验“用户名不能为空” → 用
isBlank(),防止用户只输空格提交 - 判断 Map 的 key 是否未设置(明确要求长度为 0)→ 用
isEmpty() - 解析协议字段,约定空字段必须是 "" 而非 " " → 用
isEmpty()保证严格匹配
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











