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包就因为一个配置项错了又要重新 ...
随机推荐
- 系统C盘空间严重的不足的几个清理方法
大家在电脑使用久了以后,往往会遇到C盘空间不足的问题,这很可能进一步导致磁盘空间不足,软件无法正常运行,甚至电脑严重卡顿等问题. 下面给大家分享一些我自己在C盘空间不足过程中搜集的一些清理C盘空间的实 ...
- 教你用Elastic Search:运行第一条Hello World搜索命令
摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...
- Solution -「ABC 213H」Stroll
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个结点 \(m\) 条边的简单无向图,每条边的边权是一个常数项为 \(0\) 的 \(T\) 次多项式, ...
- 羽夏闲谈—— C 语言入门之问
前言 最近加入了一个QQ频道,有很多想学C的纯小白.为什么这么说呢?因为他们会问一些环境用啥?为啥我配置不行?看了教程配置环境我也不会,咋配置?为啥这里代码这里有错误?啥语言好不好?诸如此类的问题 ...
- Error from server error dialing backend remote error tls internal error
# kubectl exec -it mysql-master-8cfb64ff9-ct4dx -n prophet -- /bin/bash Error from server: error dia ...
- apache缺少模块解决方法
找到一台老古董机器 [root@resource conf]# cat /etc/redhat-release CentOS release 5.6 (Final) [root@resource co ...
- 关于maven依赖中的scope的作用和用法
举例如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...
- Dapr 中文社区汇总
Dapr 于 2019 年在微软创建.随着时间的推移,许多社区成员加入该项目并做出贡献,扩展并帮助它在 2021 年 2 月达到了稳定的 1.0 版本.2021年3 月提交给 CNCF,在2021年1 ...
- Paxos 学习笔记2 - Multi-Paxos
Paxos 学习笔记2 - Multi-Paxos 图片来自 John Ousterhout 的 Raft user study 系列课程 Multi-Paxos 论文里对很多问题并没有描述清楚,所以 ...
- 还在用Excel做数据分析?别人都在用数据分析工具啦!
"Excel在过去.现在和未来都是一个无比优秀和天才的工具,无数虔诚的信徒将其奉为唯一的法门,而我却并不在其中了." 作为一个数据分析师,Excel是我入门必备的数据分析工具,虽然 ...