3 回答

TA貢獻1825條經驗 獲得超4個贊
該String.equalsIgnoreCase(String)javadoc的狀態:
不考慮大小寫考慮,將此字符串與另一個字符串進行比較。如果兩個字符串的長度相同,并且兩個字符串中的對應字符相等,則忽略大小寫,將它們視為相等的忽略大小寫。
所以這些語句的行為與String.equalsIgnoreCase(String)產生相同結果的相同,String不論是調用者還是自String變量null。
唯一可能不同的是null,在語句中存在引用可能會引發的引用NullPointerException。
在您的示例中,兩條語句可能會拖尾,NullPointerException但可能不在同一位置:
myClass.getLocale().equalsIgnoreCase("en")
|-----|---- two potential NPE
("en").equalsIgnoreCase(myClass.getLocale())
|----- potential NPE
需要注意的是第二種方式是更強大的,如果它只會失敗myClass是null在第一可能會失敗或者myClass或myClass.getLocale()參考null。
總而言之,如果在您的應用程序myClass中不能null,則應堅持第二種方式。
否則,如果myClass可能null,你應該執行null前檢查:
boolean isEqualIgnoreCase = false;
if (myClass != null){
isEqualIgnoreCase = ("en").equalsIgnoreCase(myClass.getLocale());
}

TA貢獻1852條經驗 獲得超7個贊
myClass.getLocale().equalsIgnoreCase("en")
拋出NullPointerException
時myClass.locale
為空。
("en").equalsIgnoreCase(myClass.getLocale())
不編譯。
如果您正在談論"en".equalsIgnoreCase(myClass.getLocale())
,myClass.locale
則為null時可以正常工作。false
將被退回。

TA貢獻1744條經驗 獲得超4個贊
我發現的唯一區別是,在第一個示例中,該語句myClass.getLocale()
不是null安全的,因此可能會以某種方式返回null
并導致NullPointerException。
第二個是安全的,因為您在上調用了一個方法"en"
,null
即使null
用來將a傳遞給該方法也不會失敗也不會失敗myClass.getLocale()
。
編輯:兩種解釋都假定myClass
本身不為null,因此只會getLocale()
失敗。在null的情況下,沒有一個解決方案是null安全的myClass
-無論如何都會拋出NPE。(@davidxxx)
添加回答
舉報