equals 為什么要把常量寫在前面?


看例子

使用str1.equals("abc");

如果str1是null,空是沒有equals方法的,會拋出空指針異常

如果"abc".equals(str1);如果str1是null,最終始終返回的都是false;

也就是說 null在前會報空指針,null在后不會,會返回false

空指針就是空引用,java空指針異常就是引用本身為空,卻調用了方法,這個時候就會出現空指針異常。可以理解,成員變量和方法是屬於對象的(除去靜態),在對象中才存在相對應的成員變量和方法,然后通過對象去調用這些成員變量和方法。對於空指針來說,它不指向任何對象,也就沒有所謂的成員變量和方法,這個時候用它去調用某些屬性和方法,當然會出現空指針異常。

null是所有引用類型的默認值,如果沒有讓一個引用指向一個實際存在的對象,它的默認值就是null。null本質上是一個值,這跟int的默認值是0,boolean的默認值是false一樣。現在,我們通常都使用像eclipse等的集成開發環境進行開發,一般在定義變量的時候都會進行初始化(這也是寫代碼的一個良好的習慣),如果沒有進行初始化,系統會進行提示。

所以null調任何方法都會報空指針,空字符串則不會,因為已經分配了內存地址

反過來想為什么把變量放在括號里就不會出現空指針異常呢?

equals()方法也可以比較一個變量是不是等於空,就是 "abc".equals(null); 括號里直接寫null都可以了,還怕變量為null嗎?

建議使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)方法,這是官方給出的工具類

其中利用三元表達式規避了null的問題

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;
    }

 


免責聲明!

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



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