3

哪个 if 块更好?

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");
    }
}
4

4 回答 4

8

使用第一种方法,您为NullPointerExceptions. 所以从我的角度来看,第二个更好。

对于常量的情况,您应该始终喜欢第二种方法而不是第一种方法。

"exit".equals(str)

你可以在这里找到详细的解释


我个人更喜欢另一种方法。Apache Commons-commons langObjectUtils.equals(Object, Object). 使用这种方法,即使使用值,您也始终是安全的。

文档

比较两个对象是否相等,其中一个或两个对象可能为空。

 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
于 2012-07-28T10:47:28.037 回答
2

我认为这str.equals("exit")是编写比较的更自然的方式,但会抛出一个NullPointerExceptionifstr为 null,而"exit".equals(str)只会评估为 false。

您需要知道为什么str可以为空。空值可能是由程序中其他地方的错误或错误引起的,例如,您最好null单独检查而不是忽略它,或者事先确保它不为空。

于 2012-07-28T11:17:16.100 回答
1

我更喜欢:

"exit".equals(str)

只是为了避免NullPointerException

于 2012-07-28T10:48:10.647 回答
1

您将使用以下方法躲避 NullPointerException案例:

"exit".equals(str)
于 2012-07-28T10:50:45.097 回答