2012-07-28 48 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而不是忽略它,或者确保它不是空的。