isEmpty和isNull()区别:
转自:https://cloud.tencent.com/developer/article/1171797?from=article.detail.1007616
一个NULL字符串一定是一个空串,
一个空串未必是一个NULL字符串。
例如:
QString().isNull(): //结果为true
QString().isEmpty(); //结果为true
QString("").isNull(); //结果为false
QString("").isEmpty(); //结果为true
批注: 一个NULL字符串就是使用QString的默认构造函数或者使用(const char*)0作为参数的构造函数创建的字符串对象。
QString((const char*)0).isNull(); //结果为true
====================================================
(二)转自:https://baijiahao.baidu.com/s?id=1708577968844567937&wfr=spider&for=pc
1)isEmpty
判断字符串是否为空字符串,只要有一个任意字符(包括空白字符)就不为空。
来看 isEmpty 的方法源码:
public static boolean isEmpty(CharSequence cs) {return cs == null || cs.length() == 0;}
看见没,这个方法只判断了是为为 null 或者长度为 0。
意味着,如果用户输入 " " 等空白字符,这个方法就不通过了,结果就是不为空了。
如验证输入以下内容:

2、isBlank
判断字符串是否为空字符串,全部空白字符也为空。
来看 isBlank 的方法源码:
public static boolean isBlank(CharSequence cs) {int strLen = length(cs); if (strLen == 0) { return true; } else { for(int i = 0; i < strLen; ++i) { if (!Character.isWhitespace(cs.charAt(i))) { return false; } } return true; }}
看见没,第 7 行,只要有一个字符不为空白字符就返回 false,也就是说,如果全部都为空白字符就返回 true,也就是全部空白字符也为空。
如验证输入以下内容:

这时候,如果用户输入 " " 等空白字符,这个方法也返回空了,这也是大部分业务场景下我们期望出现的结果。
isEmpty 和 isBlank 怎么选?
很明显,我们要判断一个字符串为空,绝大部分情况下 "空白字符" 也要为空的,严谨来说肯定要用 isBlank,虽然 isEmpty 也可以,但如果在最前端的接口不被拦截掉,请求到了后端的服务、数据库,就可能会造成压力,甚至是系统异常,这是完全可以避免的。
但万事也没有绝对,如果你的程序可以接受任意字符,包括 "空白字符",那就要选择 isEmpty,isBlank 会拦截所有空白字符,就达不到要求。
===============================================================================
(三) 转自:https://blog.csdn.net/qq_26620955/article/details/79555385?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-79555385-blog-111601108.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-79555385-blog-111601108.pc_relevant_default&utm_relevant_index=1
- isEmpty:已经初始化的对象,内容为空。
null
或 str.length()==
0
-
StringUtils.isEmpty(null) = true
-
StringUtils.isEmpty("") = true
-
StringUtils.isEmpty(" ") = false//注意在 StringUtils 中空格作非空处理
-
StringUtils.isEmpty(" ") = false
-
StringUtils.isEmpty("bob") = false
-
StringUtils.isEmpty(" bob ") = false
-
StringUtils.isBlank(null) = true
-
StringUtils.isBlank("") = true
-
StringUtils.isBlank(" ") = true
-
StringUtils.isBlank(" ") = true
-
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符
-
StringUtils.isBlank() //均识为空白符
-
StringUtils.isBlank("\b") = false //"\b"为单词边界符
-
StringUtils.isBlank("bob") = false
-
StringUtils.isBlank(" bob ") = false
抛NullpointException
因为那个时候JDK不知道obj是什么东西,所以根本没办法调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示