☰
isEmpty 和 isBlank 到底有啥区别?
2026/10/3 7:36:28 网站建设 项目流程

大家好,我是Java1234_小锋老师。

写表单校验、接口参数检查时,这两个方法名字很像,用起来却容易踩坑。这篇文章用几个小例子,帮你一次搞懂。

先说一句结论

isEmpty只看长度,isBlank还会把空格当成"空"。

就这么简单。但"空格"这个细节,正是很多人写 bug 的源头。


三种常见的"空"

日常开发里,字符串大概分三类:

类型例子人眼感受
真·空字符串""啥也没有
纯空格" "看起来也是空的
有内容的字符串" hello "明显有字

isEmpty和isBlank对这三类的判断结果不一样,下面展开说。


isEmpty 是什么

判断字符串长度是否为 0。

  • null→ 通常抛异常或返回true(看具体库的实现)
  • ""→true
  • " "→false(它有长度,只是全是空格)
  • "abc"→false

一句话:只要字符个数大于 0,就不算 empty。


isBlank 是什么

判断字符串是否"没有有效内容"——空字符串、纯空格都算 blank。

  • null→ 通常视为 blank
  • ""→true
  • " "→true
  • "abc"→false
  • " abc "→false(中间有字母,就不 blank 了)

一句话:trim 之后长度为 0,就算 blank。


一张表看懂区别

输入值isEmptyisBlank
null视库而定视库而定
""✅ true✅ true
" "❌ false✅ true
" hi "❌ false❌ false

看到" "那一行了吗?这是唯一的分水岭。


代码实战

Java(Apache Commons Lang)

importorg.apache.commons.lang3.StringUtils;publicclassEmptyBlankDemo{publicstaticvoidmain(String[]args){// 空字符串System.out.println(StringUtils.isEmpty(""));// trueSystem.out.println(StringUtils.isBlank(""));// true// 纯空格 —— 关键差异在这里System.out.println(StringUtils.isEmpty(" "));// falseSystem.out.println(StringUtils.isBlank(" "));// true// 有内容System.out.println(StringUtils.isEmpty("hi"));// falseSystem.out.println(StringUtils.isBlank("hi"));// false}}

Java(Spring 框架)

Spring 的StringUtils思路一样,只是包名不同:

importorg.springframework.util.StringUtils;publicclassSpringDemo{publicstaticvoidmain(String[]args){System.out.println(StringUtils.hasLength(""));// false,类似 isEmpty 取反System.out.println(StringUtils.hasText(" "));// false,类似 isBlank 取反// hasText = 有实际文字内容,空格不算}}

自己手写一个 isBlank(帮助理解原理)

/** * 手写 isBlank,理解底层逻辑 */publicstaticbooleanisBlank(Stringstr){if(str==null||str.isEmpty()){returntrue;}// 逐个字符检查是否都是空白for(inti=0;i<str.length();i++){if(!Character.isWhitespace(str.charAt(i))){returnfalse;}}returntrue;}

前端 JavaScript 对照

JS 没有内置isBlank,但思路可以照搬:

// 类似 isEmptyconstisEmpty=(str)=>str===null||str===undefined||str.length===0;// 类似 isBlankconstisBlank=(str)=>str==null||str.trim().length===0;console.log(isEmpty(" "));// falseconsole.log(isBlank(" "));// true

什么时候用哪个

用流程图梳理一下日常场景:

不允许

允许空格作为有效值

是

否

收到一个字符串参数

允许用户只输入空格吗?

用 isBlank / hasText

只关心长度是否为0?

用 isEmpty / hasLength

直接业务逻辑处理

表单昵称、评论、搜索关键词等

文件路径拼接、协议字段等极少数场景

经验法则:

场景推荐
用户输入的昵称、评论、搜索词isBlank
接口必填参数校验isBlank
只判断""而不关心空格isEmpty
拿不准默认用isBlank,更符合用户直觉

大多数业务场景,用户敲几个空格提交,你不希望当成"已填写"——所以isBlank是更常用的选择。


小结

  • isEmpty:长度为 0 才算空," "不算。
  • isBlank:空字符串 + 纯空格都算"没内容"。
  • 表单校验、参数检查 → 优先isBlank。
  • 两者不是谁更"高级",而是语义不同,用错了就会在空格输入上出 bug。

下次 Code Review 看到isEmpty校验用户输入,不妨多问一句:空格算不算填了?答案往往决定了该用哪个。


如果这篇文章帮到了你,欢迎收藏,下次判空不再纠结。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询