hutool包裡的ObjectUtil.isNull和ObjectUtil.isEmpty的區別
阿新 • • 發佈:2022-03-10
大家都用過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