大家都用过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的区别的更多相关文章

  1. ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别

    在iBATIS中isNull用于判断参数是否为Null,isNotNull相反 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true isNotEmpty相反,当参数既不为Null ...

  2. 【转】ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别

    转自:http://blog.csdn.net/fanfanjin/article/details/6676566 在iBATIS中 isNull用于判断参数是否为Null,isNotNull相反 i ...

  3. [Android Pro] Android Support 包里究竟有什么

    reference to : http://www.2cto.com/kf/201411/350928.html 随着 Android 5.0 Lollipop 的发布,Android 又为我们提供了 ...

  4. procps包里面的sysctl命令

    procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...

  5. jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder

    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...

  6. 直接修改别人jar包里面的class文件 工具:jclasslib

    出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天,没有找 ...

  7. 不安装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 ...

  8. Java读取其他jar包里的配置文件

    最近要做个东西,需要自己控制数据库的事物,项目封装的框架,实在是提不起去阅读的兴趣, 就想直接去读框架的底层实现里面的数据连接的配置文件(如:Url,port,username,password等), ...

  9. 更新jar包里的配置文件

    更新jar包里的配置文件 起因 从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了.本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新 ...

随机推荐

  1. netty系列之:channel和channelGroup

    目录 简介 神龙见首不见尾的channel channel和channelGroup channelGroup的基本使用 将关闭的channel自动移出 同时关闭serverChannel和accep ...

  2. 「codeforces - 1284G」Seollal

    给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图.保证 \((1, 1)\) 无障碍,保证无障碍格子连通. 将网格图黑白染色,相邻格子颜色不同,\((1, ...

  3. Hyperledger Fabric 2.x 动态更新智能合约

    一.说明 在上一篇文章中分享了智能合约的安装与使用,如果业务有变更代码需要修改怎么办呢?本文分享如何对已安装的合约进行版本更新. 二.环境准备 区块链网络安装:<Hyperledger Fabr ...

  4. python进阶(25)协程

    协程的定义 协程(Coroutine),又称微线程,纤程.(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动 ...

  5. mongodb4.x 集群搭建

    下载包 官网选择合适的操作系统版本下载tgz包 https://www.mongodb.com/download-center/community 部署结构 集群结构 典型的三分片Mongo集群如下图 ...

  6. 阿里云K8S节点NotReady状态

    开发部署pod的时候在wayne平台上部署不上去,删除也删除不了 先删除 kubectl delete pod pod-name --grace-period=0 --force 删除之后然后部署新的 ...

  7. jmeter重点(详细)

    之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下. 测试计划 可以理解为各种测试元件的容器 其中: 定义整个测试中使用的重复值(全局变量),一般定义服务器的ip.端 ...

  8. 一个杂项PDF

    不是很难,但是就是比较考虑个人的细心程度,下载压缩包解压得到一个pdf文件,直接打开发现没有什么隐藏的信息,准换成word也是,没有什么东西,使用winhex打开看一下,一开始是没有注意到什么的,这里 ...

  9. Kali Linux解压包命令:

    Kali Linux解压包命令: tar.gz格式压缩包: root@kali:~# tar -xzvf 压缩包.tar.gz -C /root/home/Desktop root@kali:~# c ...

  10. json系列(二)cjson,rapidjson,yyjson大整数解析精度对比

    前言上一篇介绍了3种json解析工具的使用方法,对于基础数据的解析没有任何问题.我们传输的json数据里有unsigned long型数据,需要借助json解析工具得到正确的unsigned long ...