1. 程式人生 > >equals方法避免空指標的比較方法

equals方法避免空指標的比較方法

首先看個例子

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呼叫了方法。

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