判斷一個字符串是否是空字符串(前提已經是知道這個字符串不是空對象)

 在項目裏面我們經常用到這樣一句代碼:


//這裏我對 s  直接局部賦值了哈,就不從對象或者是其他地方去讀取了.
String s = "測試";
//假設現在的需求就是對 s 做非空判斷,當它不爲空的時候就設置到TextView上去顯示
if(null != s && !"".equals(s)){
    tv.setText(s);
}

//請不要在意我上面的顯示邏輯

請看上面的判斷,先判斷 不等於null是沒問題的,然後再判斷是否爲空字符串,代碼走到這裏的時候就已經知道這個對象不是null了,可以直接用s.length() != 0 來替代 "".equals(s)了,因爲equals 源碼如下:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = length();
            if (n == anotherString.length()) {
                int i = 0;
                while (n-- != 0) {
                    if (charAt(i) != anotherString.charAt(i))
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

我們直接看 int n = length(); 和下面那句,就是對兩個對象(如果你做的是非空字符串判斷),按照"",equals(s); 的話,this 就是空字符串,anObject 就是傳進來的s ,然後先做 this == anObject 判斷,然後再做 anObject instanceof 判斷,然後又走到了長度校驗等等一些操作。

試問,如果我們知道這個對象不是null,爲什麼不直接用 s.length() != 0 來判斷這個字符串是否爲空呢?反而用equals,我自己在代碼裏面做非空校驗的時候也是喜歡用equals,但是其實在不爲null的基礎上s.length() !=0 更加直接高效,所以我建議我自己喝大家以後做類似操作的時候,儘量寫錯下面這樣:

if(null != s && s.length() !=0 ){
    tv.setText(s);
}

雖然在效率上沒有什麼很大的提升,但是資源能節約一點是一點,關鍵是,我們要知道這個事實。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章