equals變量在前面或者在后面有什么區別嗎?這是一個坑點


我就不廢話那么多,直接上代碼:

package sf.com.mainTest;

public class Test {

    public static void main(String[] args) {
        System.out.println(new Test().isBool(null));
    }
    
    public boolean isBool(String a){
        return a.equals("true");
//        return "null".equals(a);
    }

}

如上述代碼:a.equals("true");和"null".equals(a);有什么區別的?

答案:前者會拋空指針異常,后者不會;

剖析:如果a=null,String對象就會是一個空對象,空對象說明沒有equals方法,所以就會報空指針異常;

又如,后者a=null,"null".equals(a);結果永遠都為false,原因直接看源碼:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
     //判斷anObject是否為String類型
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; }

為了避免這個坑點,還是使用另外一種方式吧!

使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)方法

直接看源碼:

public static boolean equals(String str1, String str2)
    {
        return str1 != null ? str1.equals(str2) : str2 == null;
    }
  //忽略大小寫進行比較
    public static boolean equalsIgnoreCase(String str1, String str2)
    {
        return str1 != null ? str1.equalsIgnoreCase(str2) : str2 == null;
    }

看到StringUtils.equals這個方法了吧。他已經幫你繞過了那個坑,我還是比較推薦大家多用用StringUtils工具類里面的方法,

畢竟是人家封裝好的,可以直接拿來用,盡量少走彎路。

 


免責聲明!

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



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