我見過大多數情況下開發人員使用第一個字符串,然後在.equal
操作中使用該變量。是什麼原因?爲什麼在Java中,(「string」)。equals(var)推薦的不是(var).equals(「string」)?
4
A
回答
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
相關問題
- 1. string.Equals(「string」)和「String」.Equals(string)的區別是什麼?
- 2. 在PHP中,「string」。$ var和「string $ var」有什麼區別?
- 3. str.equals(「String」)vs「String」.equals(str)
- 4. 'string'== $ var或$ var =='string'的區別?
- 5. C#:CompareTo(String)和Equals(String)有什麼區別?
- 6. Javascript - string + var alert
- 7. 什麼是需要重寫String類中的equals方法?
- 8. 在另一個equals()實現中使用String的equals()實現?
- 9. 這是什麼類型(Swift)? var something = [(item1:String,item2:Float,item3:[String])]()
- 10. 「null」String .equals(「null」)返回false java(JOptionPane)
- 11. 爲什麼String equals()返回false(涉及自定義比較器)?
- 12. Java中「equals」的含義是什麼?
- 13. Java API中的「equals」是什麼意思?
- 14. 爲什麼==不工作,但.equals()是?
- 15. 什麼是java中的「String ...」?
- 16. 在Java中.equals()
- 17. String []和String ...(Var-args)在內部工作時是否相同?
- 18. String類中的Object的equals方法和自定義類中Object的equals方法有什麼區別
- 19. setAttribute to var string in Javascript
- 20. Javascript String Var + jQuery Textbox Val
- 21. 對Java中的String和Object使用equals()方法
- 22. 什麼是$ {VAR}和{$ VAR}
- 23. 爲什麼不在String中使用Java?
- 24. 在String var中替換雙引號?
- 25. == vs .equals - 爲什麼不同的行爲?
- 26. 什麼VAR = VAR &&「*」的意思是在Javascript
- 27. var讀取HTML代碼爲STRING
- 28. C#中的var和string有什麼區別?
- 29. 的Java String對象.Equals無法按照預期工作
- 30. 爲什麼info.php只有放在/ var/www/html而不是/ var/www /?
@JqueryLearner嗯, 「處理」 的問題是:d –
@JqueryLearner使用'RuntimeException'檢查值是是絕對不是一件好事。所以,總是'「String」.equals(var)'。如果你需要知道var是否爲空,只需測試它。正如你在編寫var.equals(「String」)時所做的那樣,因爲當你可以避免它時,讓一個NPE發生並不是件好事。 – lpratlong
因爲像Yoda一樣,程序員也這麼說。 – Palpatim