Java判斷String是否爲空或不爲空(並且equals的好的寫法,不報空指針)

首先澄清一個概念:

String str; 
if(str == null || str.equals(" ")){
}
  • 1
  • 2
  • 3

  str == null 說明str還未指向一個特定的字符串對象,此時談不上是否爲空。str = “”;說明str是個空字符串,只不過長度爲0;

字符串判斷空的幾種寫法:

//①.最多人使用的一個方法, 直觀, 方便, 但效率很低; 
if (str == null || "".equals(str)) { 
}  

//②.比較字符串長度,效率高,是最好的一個方法;
if (str == null || str.length() <= 0) {  
}

//③.JavaSE6.0 纔開始提供的方法, 效率和方法二幾乎相等,但出於兼容性考慮, 推薦使用方法二;
if (str == null || str.isEmpty()) {  
}  
//④.這是一種比較直觀,簡便的方法,而且效率也非常的高,與方法二、三的效率差不多; 
if (str == null || str == "") {  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  相應的不爲空的判斷加上 “非”(!)的判斷即可。




2.

首先看個例子

 

public static void main(String[] args) {

 String a=null;
 if("aa".equals(a))//這種情形,不出現空指針異常
 //if(a.equals("aa"))//出現空指針異常
 {
 System.out.println(true);
 }
 else {
 System.out.println(false);
 }
 }

 

面的兩句不同的比較語句測試,第一句不出現空指針異常,第二句出現。
所以在變量和常量比較的時候,一般把常量放在前面。爲了避免空指針異常。
但是我的問題是:變量在前時候,讀到變量,變量爲空,就出現異常了。
爲什麼變量在後時候,a變量就不用讀了嗎?既然要比較肯定也要讀啊,問題
只是先後的問題。爲什麼放在後面就就不報空指針呢?

 

看了一下string類的equals方法

 

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

源碼我看了一下,也明白,但是在源碼中如果anobject爲空的時候,就不會出現空指針異常嗎 ?
後來經過一番討論後,我得出的結論是這樣的:

問題是出現在調用方法上了。因爲null值,並不是一個String對象。而你通過聲明的String對象引用去 調用了String對象的實例方法。當然不可以了。null調用了方法。

所以系統報出了,空指針異常。


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