簡體   English   中英

Java中的字符串相等

[英]String equality in Java

在檢查兩個Java String的相等性時,我已經看到了這兩個:

// Method A
String string1;
// ...
if("MyString".equals(string1)) {
    // ...
}

// Method B
String string1;
// ...
if(string1.equals("MyString")) {
    // ...
}

我的問題是:哪一個更好,更廣泛使用?

如果您確定string1永遠不能為null,則選項2是可讀且首選的。 否則選項1.選項1的意圖是避免潛在的空指針。

方法B將在null string1上失敗,並且NullPointerException,而方法A將永遠不會拋出它。 一些當局要求這種“防御性”節目。 他們影響了我這樣做,雖然它仍然沒有自然而然!

也可以寫

if (string1 != null && string1.equals("MyString")) ...

雖然像FindBugs這樣的工具會將此標記為可能的錯誤,但假設您應該確保string1已經為非null。 (你能依靠評估的順序嗎?)。

所以有不同的思想流派。

方法A不會拋出空指針異常。 兩者中沒有更好的。 這取決於你是否希望它拋出一個npe(你可能想要在你的整體設計中)。

方法a不會拋出NullPointerException ,因此非常方便。 它也被廣泛使用。

例外是異常處理,並且比檢查錯誤條件和使用常規邏輯處理它們有更多的開銷。 如果你已經編程了十年,NPE是一個棘手的問題,通常表示粗心的代碼。 通過使用“常量”.equals(變量)來避免它們,閱讀代碼並使用它的人會更快樂。

第二個是更廣泛使用。 兩者都不是更好。

它的想法是一樣的

if (1 == x)

但沒有具體原因。 但出於不同的原因。 (其他人指出的空指針)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM