大家都用過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