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包就因为一个配置项错了又要重新 ...
随机推荐
- 系统操作命令实践 下(系统指令+增删改查+vim编辑器)
目录 1.考试 2.今日问题 3.今日内容 4.复制文件 4.移动文件 Linux文件查看补充 cat , nl 5.删除文件 6.系统别名 7.vi/vim编辑器 系统操作命令实践 下(系统指令+增 ...
- 通过PEB寻找函数地址
通过PEB的Ldr参数(结构体定义为_PEB_LDR_DATA),遍历当前进程加载的模块信息链表,找到目标模块. 摘自PEB LDR DATA: typedef struct _PEB_LDR ...
- Linux海王 之 pdsh (并行管理工具)
文章目录 安装 使用 示例 -w 指定主机 -l 指定用户 -g指定用户组 主机列表 交互式界面 pdsh是一个多线程远程shell客户机,它在多个远程主机上并行执行命令 pdsh可以使用几种不同的远 ...
- CMake 交叉编译
CMake 交叉编译 交叉编译就是说在平台 A (宿主机)上编译出可以在平台 B (目标机) 上运行的程序,比如在 x86 上编译 ARM 程序 要交叉编译首先要去下载目标平台的工具链,比如要编译 A ...
- 巧用 CSS 实现炫彩三角边框动画
最近有个小伙伴问我,在某个网站看到一个使用 SVG 实现的炫彩三角边框动画,问能否使用 CSS 实现: 很有意思的一个动画效果,立马让我想起了我在 CSS 奇思妙想边框动画 一文中介绍的边框动画,非常 ...
- k-NN——算法实现
k-NN 没有特别的训练过程,给定训练集,标签,k,计算待预测特征到训练集的所有距离,选取前k个距离最小的训练集,k个中标签最多的为预测标签 约会类型分类.手写数字识别分类 计算输入数据到每一个训练数 ...
- python+pytest(3)-接口测试一般流程及方法
首先我们要明确,通常所接口测试其实就属于功能测试,主要校验接口是否实现预定的功能,虽然有些情况下可能还需要对接口进行性能测试.安全性测试. 在学习接口自动化测试之前,我们先来了解手工接口测试怎样进行. ...
- python3中zip()的用法
zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象. 这个可迭代对象可以使用循环的方式列出其元素 若多个可迭代对象的长度不一致,则所返回的 ...
- python字符串格式化输出 %和format举例
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj s1 = "i am %s, i ...
- 推动式&拉动式生产
拉动式:订单发给最后一个单元 推动式:订单发给第一个单元