1. 程式人生 > 其它 >hutool包裡的ObjectUtil.isNull和ObjectUtil.isEmpty的區別

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