登录
首页 >  文章 >  java教程

Java11StringisEmptyvsisBlank区别解析

时间:2026-05-09 20:27:55 109浏览 收藏

Java 11+ 中的 `isEmpty()` 和 `isBlank()` 虽然都用于判断字符串“空”的状态,但语义和适用场景截然不同:`isEmpty()` 仅关注字符串长度是否为0,轻量高效却对空白字符“视而不见”;而 `isBlank()` 则真正理解业务中的“空”——它将空字符串和全由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() 保证严格匹配
注意:isBlank() 是实例方法,不是静态工具类,无需引入 Apache Commons 或 Guava。

终于介绍完啦!小伙伴们,这篇关于《Java11StringisEmptyvsisBlank区别解析》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>