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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM