2012-07-28 61 views
3

如果塊更好?其中字符串的最好最好的技術等於比較

private static void checkStr(String str) { 

    if (str.equals("exit")) { 
     System.out.println("It is equal"); 
    } 
    if ("exit".equals(str)) { 
     System.out.println("It is equal"); 
    } 
} 
+1

如果你爲開發做這件事,我會建議使用ApacheCommon更好的優雅 – 2012-07-28 10:48:34

回答

8

第一種方法是給NullPointerExceptions保證金。所以從我的角度來看,第二個更好。

對於常量的情況,你應該總是比第一種方法更喜歡第二種方法。

"exit".equals(str) 

你可以找到一個詳細的解釋here


我個人更喜歡另一種方法。 Apache Commons - commons langObjectUtils.equals(Object, Object)。採用這種方法,即使對於null值,您也始終安全。

documentation來自:

比較是否相等,其中任一個或兩個對象 可以爲空的兩個對象。

ObjectUtils.equals(null, null)     = true 
ObjectUtils.equals(null, "")     = false 
ObjectUtils.equals("", null)     = false 
ObjectUtils.equals("", "")      = true 
ObjectUtils.equals(Boolean.TRUE, null)   = false 
ObjectUtils.equals(Boolean.TRUE, "true")  = false 
ObjectUtils.equals(Boolean.TRUE, Boolean.TRUE) = true 
ObjectUtils.equals(Boolean.TRUE, Boolean.FALSE) = false 
+1

是的第二個更可讀 – Pooya 2012-07-28 10:50:45

+0

可以肯定的是,如果你想允許空值,這是唯一的。在許多情況下,您希望儘快拋出空值,因爲它們代表了您想要修復的錯誤。 – 2012-07-28 14:14:42

+0

謝謝。你用很好的方式描述瞭解決方案。 – 2012-07-31 04:39:15

1

我喜歡:

"exit".equals(str) 

,只是爲了避免NullPointerException

1

你會NullPointerException情況下使用:

"exit".equals(str) 
2

我覺得str.equals("exit")是寫的比較更自然的方式,但會拋出一個NullPointerException如果str是空的,而"exit".equals(str)只會評估爲假。

您需要知道爲什麼str可以爲null。空值可能是由程序中其他地方的錯誤或錯誤引起的,例如,您可能會更好地單獨檢查null而不是忽略它,或者確保它不是空的。