hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别
大家都用过hutool包把,包路径为:cn.hutool.core.util,最近再使用的过程中一直没高明白ObjectUtil.isEmpty和ObjectUtil.isNull两者到底有那些区别,再使用过程中我们该如何选择?下面我就来测试一下。
看源码:
ObjectUtil.isEmpty
public static boolean isEmpty(Object obj) {
if (null == obj) { // 任何对象
return true;
} else if (obj instanceof CharSequence) { // 字符串
return StrUtil.isEmpty((CharSequence)obj);
} else if (obj instanceof Map) { //map集合
return MapUtil.isEmpty((Map)obj);
} else if (obj instanceof Iterable) { // 具有迭代性质的接口,比如集合Collection就是实现了它
return IterUtil.isEmpty((Iterable)obj);
} else if (obj instanceof Iterator) { // 迭代器类,可以将集合转化为迭代器,用迭代器的方式来操作里面的数据元素
return IterUtil.isEmpty((Iterator)obj);
} else {
return ArrayUtil.isArray(obj) ? ArrayUtil.isEmpty(obj) : false; // 数组
}
}
测试:
public class Test01 {
public static void main(String[] args) {
// 定义一个集合null;
List<String> a = null;
System.out.println("定义一个集合null:" + ObjectUtil.isEmpty(a));
// 定义一个集合为空;
List<String> b = new ArrayList<>();
System.out.println("定义一个集合为空:" + ObjectUtil.isEmpty(b));
// 定义一个对象是null
Object c = null;
System.out.println("定义一个对象是null:" + ObjectUtil.isEmpty(c));
// 定义一个Map是null
Map<String, String> d = null;
System.out.println("定义一个Map是null:" + ObjectUtil.isEmpty(d));
// 定义一个Map是空
Map<String, String> e = new HashMap<>();
System.out.println("定义一个Map是空:" + ObjectUtil.isEmpty(e));
// 定义一个字符串是null
String f = null;
System.out.println("定义一个字符串是null:" + ObjectUtil.isEmpty(f));
// 定义一个字符串是空字符串
String g = "";
System.out.println("定义一个字符串是空字符串:" + ObjectUtil.isEmpty(g));
// 定义一个迭代器是空
Iterator iterator = b.iterator();
System.out.println("定义一个迭代器是空:" + ObjectUtil.isEmpty(iterator));
// 定义一个数组是null
String[] array = null;
System.out.println("定义一个数组是null:" + ObjectUtil.isEmpty(array));
// 定义一个数组是空
String[] aa = new String[0];
System.out.println("定义一个数组是空:" + ObjectUtil.isEmpty(aa));
// 定义一个数组是2
String[] aa2 = new String[2];
System.out.println("定义一个数组是2:" + ObjectUtil.isEmpty(aa2));
}
}
// 输出
定义一个集合null:true
定义一个集合为空:true
定义一个对象是null:true
定义一个Map是null:true
定义一个Map是空:true
定义一个字符串是null:true
定义一个字符串是空字符串:true
定义一个迭代器是空:true
定义一个数组是null:true
定义一个数组是空:true
定义一个数组是2:false
可以看到ObjectUtil.isEmpty对null和空都做了判断,类型包括了对象、集合、Map、迭代器、数组、字符串。
ObjectUtil.isNull
看源码:
public static boolean isNull(Object obj) {
return null == obj || obj.equals((Object)null);
}
测试:
public class Test01 {
public static void main(String[] args) {
// 定义一个集合null;
List<String> a = null;
System.out.println("定义一个集合null:" + ObjectUtil.isNull(a));
// 定义一个集合为空;
List<String> b = new ArrayList<>();
System.out.println("定义一个集合为空:" + ObjectUtil.isNull(b));
// 定义一个对象是null
Object c = null;
System.out.println("定义一个对象是null:" + ObjectUtil.isNull(c));
// 定义一个Map是null
Map<String, String> d = null;
System.out.println("定义一个Map是null:" + ObjectUtil.isNull(d));
// 定义一个Map是空
Map<String, String> e = new HashMap<>();
System.out.println("定义一个Map是空:" + ObjectUtil.isNull(e));
// 定义一个字符串是null
String f = null;
System.out.println("定义一个字符串是null:" + ObjectUtil.isNull(f));
// 定义一个字符串是空字符串
String g = "";
System.out.println("定义一个字符串是空字符串:" + ObjectUtil.isNull(g));
// 定义一个迭代器是空
Iterator iterator = b.iterator();
System.out.println("定义一个迭代器是空:" + ObjectUtil.isNull(iterator));
// 定义一个数组是null
String[] array = null;
System.out.println("定义一个数组是null:" + ObjectUtil.isNull(array));
// 定义一个数组是空
String[] aa = new String[0];
System.out.println("定义一个数组是空:" + ObjectUtil.isNull(aa));
// 定义一个数组是2
String[] aa2 = new String[2];
System.out.println("定义一个数组是2:" + ObjectUtil.isNull(aa2));
}
}
// 输出
定义一个集合null:true
定义一个集合为空:false
定义一个对象是null:true
定义一个Map是null:true
定义一个Map是空:false
定义一个字符串是null:true
定义一个字符串是空字符串:false
定义一个迭代器是空:false
定义一个数组是null:true
定义一个数组是空:false
定义一个数组是2:false
可以看到ObjectUtil.isNull只对null做了判断,是属于ObjectUtil.isEmpty里面的一种操作。
总结:ObjectUtil.isNull的作用是ObjectUtil.isEmpty里面的其中一项,我们平时写代码的时候可以直接使用ObjectUtil.isEmpty来操作即可,如果你确认你是对null做判断,你也可以使用ObjectUtil.isNull
hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别的更多相关文章
- ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
在iBATIS中isNull用于判断参数是否为Null,isNotNull相反 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true isNotEmpty相反,当参数既不为Null ...
- 【转】ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
转自:http://blog.csdn.net/fanfanjin/article/details/6676566 在iBATIS中 isNull用于判断参数是否为Null,isNotNull相反 i ...
- [Android Pro] Android Support 包里究竟有什么
reference to : http://www.2cto.com/kf/201411/350928.html 随着 Android 5.0 Lollipop 的发布,Android 又为我们提供了 ...
- procps包里面的sysctl命令
procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...
- jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder
jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...
- 直接修改别人jar包里面的class文件 工具:jclasslib
出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天,没有找 ...
- 不安装rpm包,取出rpm包里的文件
1.查看rpm包里的文件 [root@VM_166_132 ~]# rpm -qlp mysql5.6.29-1-3.x86_64.rpm |more/etc/ld.so.conf.d/mysql-5 ...
- Java读取其他jar包里的配置文件
最近要做个东西,需要自己控制数据库的事物,项目封装的框架,实在是提不起去阅读的兴趣, 就想直接去读框架的底层实现里面的数据连接的配置文件(如:Url,port,username,password等), ...
- 更新jar包里的配置文件
更新jar包里的配置文件 起因 从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了.本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新 ...
随机推荐
- 使用污点分析检查log4j问题
摘要:log4j问题的余波还在继续,为什么这个问题潜伏了这么长时间,大家一直没有发现?这里从静态分析的角度谈下log4j问题的发现. 本文分享自华为云社区<使用污点分析检查log4j问题> ...
- 帆软报表(finereport)禁用右键
点击模板>模板web属性>(填报,数据分析,分页预览设置),选择为该模板单独设置,在下面的事件设置里面添加一个加载结束事件,完整js代码如下: 这段代码的基本原理是让用户的页面右键点击事件 ...
- ClassPath资源的读取
读取ClassPath的资源 在程序中经常有很多资源需要读取,常见的就是配置文件,Java中将文件当作一种资源来处理,可以使用Class或者ClassLoader来处理 一,使用Class类的getS ...
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- pytest(9)-标记用例(指定执行、跳过用例、预期失败)
pytest中提供的mark模块,可以实现很多功能,如: 标记用例,即打标签 skip.skipif标记跳过,skip跳过当前用例,skipif符合情况则跳过当前用例 xfail标记为预期失败 标记用 ...
- Visual Studio 2017-2019版本创建C#项目时没有创建网站这一选项?
通过了解以后发现Visual Studio 2017之后的版本在新建选项中已经不再有这一选择项了. 解决办法: 1.在创建新项目的面板滑倒最下面,---> 安装多个人工具和功能 2.这时已经打开 ...
- 企业数据仪表盘设计思路,如何设计自己的BI产品
现在,很多企业的高层领导喜欢建数据仪表盘或者管理驾驶舱,甚至用巨大无比的显示屏阵列来展示各种关键业务指标KPI,那成功设计一个数据仪表盘需要如何做?又需要注意什么问题呢? 数据仪表盘是数据可视化的一 ...
- 『无为则无心』Python日志 — 65、日志模块logging的使用
目录 1.logger类用法 2.handler类用法 3.formatter类用法 4.filter类用法 1.logger类用法 logger类:logger用于提供日志接口,常用于配置和发送日志 ...
- java8 如何优化CAS的性能
场景引入 经常都会有下面这段代码,多个线程同时修改一个变量,造成线程不安全,代码如下: public class ThreadCASDemo implements Runnable { static ...
- Weblogic补丁升级常见问题
转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...