2014-06-06 123 views
4

我見過大多數情況下開發人員使用第一個字符串,然後在.equal操作中使用該變量。是什麼原因?爲什麼在Java中,(「string」)。equals(var)推薦的不是(var).equals(「string」)?

+0

@JqueryLearner嗯, 「處理」 的問題是:d –

+0

@JqueryLearner使用'RuntimeException'檢查值是是絕對不是一件好事。所以,總是'「String」.equals(var)'。如果你需要知道var是否爲空,只需測試它。正如你在編寫var.equals(「String」)時所做的那樣,因爲當你可以避免它時,讓一個NPE發生並不是件好事。 – lpratlong

+0

因爲像Yoda一樣,程序員也這麼說。 – Palpatim

回答

9

因爲var可以是null而var.equals(「string」)會拋出NullPointerException(嘗試調用null上的方法)。另一方面,"string".equals(null)只會返回false。

3

因爲如果var爲null,您不會引發NullPointerException。

3
public static void badOne() { 
    String s = null; 
    System.out.println(s.equals("abc")); 
    // This function will throw null pointer 
} 

public static void goodOne() { 
    String s = null; 
    System.out.println("abc".equals(s)); 
    // This will print false 
} 
4

爲什麼在Java中,(「串」)。等於(VAR)建議多(VAR).equals(「串」)等?

這是因爲你不知道什麼是var指向。它很可能是空的,因爲你可能會得到NPE會殺死你當前的線程。所以第二種方法是優選的,因爲(「string」).equals(var)返回false。

例如,考慮你在你的servlet

String var = request.getParameter("myvar"); 
if(var.equals("myVarValue")) { 
//do something 
} 

這將拋出NPE得到這個變種,如果參數不在您的要求來。

1

我不會使用(「string」)。equals(var),因爲它可能表明程序員不知道var是否爲null。我會記錄如果一個var可以爲null或不,並檢查它。

例子:

String makeAString(@NonNull String aStringValue) { 
    Validate.notNull(aStringValue, "aStringValue must not be null"); 
    if (aStringValue.equals("abcde") { 
     return "fg"; 
    } else { 
     return "de"; 
    } 
} 

String makeAString(@Nullable String aStringValue) { 
    if (aStringValue == null) { 
     return "kl"; 
    } 
    if (aStringValue.equals("abcde") { 
     return "fg"; 
    } else { 
     return "de"; 
    } 
} 
+0

這假定您可以控制字符串的內容,但情況並非總是如此。儘管原則上我同意,但如果可能的話,你應該簡單地確保它始終不爲空。 – JonK

相關問題