hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别

本文解析了hutool包中ObjectUtil.isEmpty和ObjectUtil.isNull的区别,讲解了它们在判断null和空值上的不同,并提供了实际测试案例。选择哪个取决于具体需求,理解两者有助于提升代码准确性。
摘要由CSDN通过智能技术生成

大家都用过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
定义一个数组是2false

可以看到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
定义一个数组是2false

可以看到ObjectUtil.isNull只对null做了判断,是属于ObjectUtil.isEmpty里面的一种操作。

总结:ObjectUtil.isNull的作用是ObjectUtil.isEmpty操作里面的其中一项,我们平时写代码的时候可以直接使用ObjectUtil.isEmpty来操作即可,如果你确认你是对null做判断,你也可以使用ObjectUtil.isNull

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值