"aa".equals(name)這種寫法為什么就可以避免空指針


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

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

看了一下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調用了方法。

所以系統報出了,空指針異常。所以說,呼應文章的標題,這樣還真的是避免了控制針異常。畢竟“aaa”這樣的形式,不是null形式,是可以調用方法的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM