equals方法被調用時字符串和對象的順序


之前改的bug,一開始我先判斷sortKey不為空,然后再去判斷sortKey的值,見下圖,

 

代碼push后,同事審核后,叫我將sortKey和值得順序調換一下,說這樣就不用再判斷為空。這是改之后的代碼,見下圖,

 

問了幾個人,說是避免空指針異常,我說我前面已經對sortKey做了一個不為空判定,有人回答說雖然沒有錯,但是多判斷了一次,而且從代碼規范上看顯得多余。

問題來了,equals方法被調用時,誰在前誰在后,這里面有什么講究?經過查閱相關資料,整理了一些知識點。

equals方法在Object抽象類中比較的是兩個對象的引用地址是否相同,然而在String類型中,equals方法被重寫了。因此String類型中的equals方法是比較當前字符串與傳進來的字符串是否相同。

如果將對象放在前面,調用equals方法時,若對象為空,會報空指針異常;

但若是將字符串放在前面,也就是相當於判斷這個字符串的值,即使它為空,也不會報錯。因此可以總結為:報不報錯主要看調用equals的對象是否為空。

所以在使用equals方法時,通常將字符串放在前面,比如"userName" .equals (對象),這樣就不用擔心對象為空了。先前寫的雖然對sortKey對象做了不為空的判定,一方面多判斷了一次,影響性能,另一反面也浪費了equals方法的使用。所以調換順序更為規范。


免責聲明!

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



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