大家都用过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. 1、Golang基础--Go简介、环境搭建、变量、常量与iota、函数与函数高级

    1 Go语言介绍 1 golang-->Go--->谷歌公司 2009年 golang:指go语言,指的go的sdk goland:软件,ide:集成开发环境 Java写的 2 Go是静态 ...

  2. MYSQL优化的一些性能与技巧

    1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一 ...

  3. CoRR 2018 | Horovod: Fast and Easy Distributed Deep Learning in Tensorflow

    将深度学习模型的训练从单GPU扩展到多GPU主要面临以下问题:(1)训练框架必须支持GPU间的通信,(2)用户必须更改大量代码以使用多GPU进行训练.为了克服这些问题,本文提出了Horovod,它通过 ...

  4. 【数据共享】基于Landsat提取的全球河网(河宽)GDWL数据库

    GRWL数据库,全称Global River Widths from Landsat Database,是由Allen, George H & Pavelsky. Tamlin M等人基于La ...

  5. Clickhouse - Replication机制

    Clickhouse - Replication机制 1. Replication引擎族 Replication仅对于MergeTree引擎族提供支持, 两者是正交的: ReplicatedMerge ...

  6. 【计理01组30号】Java 实现日记写作软件

    项目分析 代码设计 com.shiyanlou.entity User.java package com.shiyanlou.entity; public class User { private S ...

  7. prometheus k8s服务发现

    Prometheus的服务发现在解决什么问题? 被监控的目标(target)是整个监控体系中重要组成部分,传统监控系统zabbix通过 网络发现的机制自动创建主机到zabbix-server,进而快速 ...

  8. yield return Il代码讲解

    反编译后,迭代器用的是状态机,栈本身就是状态机,由于协程本身也有栈, 我怀疑C#中的 迭代器和基于任务的异步编程是协程(未经过验证) .class nested private auto ansi s ...

  9. 该懂的知识-CPU

    进程也好,线程也好,最后都是转换成CPU指令由CPU执行的,所有的CPU指令都需要执行时间,多一个CP,就能够同时执行很多指令.不论如何模拟,最终CPU指令都必须在某一个内核上执行. CPU的工作是不 ...

  10. 如何通过xstart远程连接桌面

    转至:https://www.cnblogs.com/LiuChang-blog/p/12324193.html 1.1.安装依赖包: (1)安装语言包: [root@slave-node2 ~]# ...