字符串判空 isnotempty & isnotblack/NULL 和空串的区别

简介: 业务中经常会有判空处理,一次忘记判空就应该一次祭天。

业务中经常会有判空处理,一次忘记判空就应该一次祭天。


如下代码被注释掉的时bug代码,由于初学λ表达式,才疏学浅,写的判空代码不敢用,却直接忽略判空处理。

           .filter(allrrule ->
                        //owner 判空处理
                        StringUtils.isNotEmpty(allrrule.getOwnerId()) ? StringUtils.equals(allrrule.getOwnerId(),fileBisRule.getOwnerId()) : true)
//                {return StringUtils.equals(allrrule.getOwnerId(),fileBisRule.getOwnerId());})
                .collect(Collectors.toList());

加上对owner的判空修复了该bug,但是我还是不太放心,可以看下图:

20190510144127291.png

也就是说StringUtils.isNotEmpty不会防住length(owner_id) = 0的数据,那用户一定会来和理论。

20190510144216404.png

isNotEmpty的结果是7条数据;isNotBlank的结果是8条数据。


1、如何解决这个问题呢?

isNotBlank(str)
isNotBlank(str) 等价于 isNotEmpty && str.trim().length > 0 (
isNotEmpty  等价于 str!=null && str.length() > 0
)

参考:https://www.cnblogs.com/dixinyunpan/p/6088612.html


2、那为什么会存下来这种数据呢?


通过问询用户,其是用excel导入的,由此可见:Excel是对导入的数据做了处理,把为NULL的字段都转成了空串。微软为什么会这么做呢?


通过查询资料发现:


 1:空值('')是不占用空间的

 2: MySQL中的NULL其实是占用空间的。官方文档说明:


“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”

那这是如何实现把NULL ->''的呢?


Mysql是这样

20190508190420714.png

Oracle是这样:

20190508190445159.png

-----------------------------2020年3月10日09:48:15----------------------

需要注意的是在oracle 中null 和空串是同等的,至少在查询 is null 这个条件下是等同的。

目录
相关文章
|
7月前
|
存储 C++ Cloud Native
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
73 0
|
6月前
|
Java 测试技术
Java系列之判断字符串是为空或者null
这篇文章介绍了如何在Java中使用`isEmpty()`方法判断字符串是否为空或`null`,并提供了相应的测试用例来演示其用法。
|
6月前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + "BLACK"`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
5月前
|
存储 JavaScript 前端开发
|
7月前
|
Unix Linux Shell
nohup 与 >/dev/null 与 2>&1 作用与区别
nohup 与 >/dev/null 与 2>&1 作用与区别
392 0
|
8月前
|
JavaScript 前端开发
null、未定义或未声明的变量之间有什么区别
null、未定义或未声明的变量之间有什么区别
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
TS,数据类型概述,常见的基本数据类型有number/string/boolean/undefined/null,字符串用““,let food: string = ‘糖葫芦‘,布尔类型
|
9月前
|
C语言
C语言(9)----NULL、null(或者NUL)、\0、0、‘0’几者之间的区别
C语言(9)----NULL、null(或者NUL)、\0、0、‘0’几者之间的区别
220 0
|
9月前
|
安全 编译器 C语言
NULL和nullptr到底是什么?它们的区别又是什么?
NULL和nullptr到底是什么?它们的区别又是什么?

热门文章

最新文章