天天看點

關于isEmpty(),null,“”的了解

關于null

《心經》中有段話說的是“色即是空,空既是色”,那麼這裡的空指的是什麼呢?用Java裡術語來說就是null。null指的就是虛無,那怎麼展現呢?且看下面小栗子

Map<String,String> map = new HashMap<>();
String b = map.get("b");
if(b == null) {
	System.out.println("b is null");
}
           

運作結果毫無疑問的是

b is null
           

因為事先并沒有對b這個鍵進行設定,是以在map裡面就根本不存在,也就說在虛拟機記憶體裡并沒有配置設定記憶體。用一句話來說就是“萬物皆空”,對于這種情況,都是null。而此時若要對b進行強制操作,則會抛出NullPointException異常。這也就是空指針異常的原因所在。

關于“”

“”就是空的字元串,那何又為空的字元串?

String s1 = new String();
String s2 = "";
if("".equals(s1)) {
    System.out.println("s1是空串");
}
if("".equals(s2)) {
	System.out.println("s2也是空串");
}
           

運作結果為

s1是空串
s2也是空串
           

為什麼s1也是空串呢?檢視源碼可以看到其中有個構造方法是這樣寫的

public String() {
    this.value = "".value;
}
           

也就說但執行個體化的時候就已經為其賦空值了。此時是為其分比對了記憶體空間,隻不過值為空而已。

關于isEmpty()

isEmpty()并不是String類型所特有的方法,ArrayList,HashMap,HashSet也同樣擁有此方法,原因在于isEmpty()實際上是Collection<E>中定義的方法,而所有繼承了該接口的方法都将會實作。

下面舉個小栗子看下其作用

List<String> al = new ArrayList<>();
if(al.isEmpty()) {
	System.out.println("ArrayList isEmpty");
}
           

其結果毫無疑問的是ArrayList isEmpty。

源碼對此給出的解釋是

public boolean isEmpty() {
    //String
    return value.length == 0;
    //ArrayList,HashMap
    return size == 0;
    //HashSet
    return map.isEmpty();
}
           

如果對此你還有疑問,那麼可以想象下在一個寂靜無聲,漆黑吞噬掉了整片大地,有一座空蕩蕩的大樓,此時這座大樓可以看成是個虛拟機記憶體。一個黑影以迅雷不及掩耳盜鈴響叮當之勢向虛拟機記憶體管理委員會送出了一份聲明,将要在此打造宇宙級的豪華酒店Luxueux,此時這個Luxueux在大樓裡并不存在,是以是null,包括你能想象到的然而實際上并不存在的都可以認為是null。不久它被建立起來了,位址007。此時可以通過007找到Luxueux超級酒店,然而裡面什麼都沒有,俨然成了鬼店。這時它就是isEmpty()。如果Luxueux是用String打造的,那它就是“”。isEmpty()的範圍更大,而“”隻适用于String。