哪个 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");
}
}
哪个 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");
}
}
使用第一种方法,您为NullPointerExceptions
. 所以从我的角度来看,第二个更好。
对于常量的情况,您应该始终喜欢第二种方法而不是第一种方法。
"exit".equals(str)
你可以在这里找到详细的解释
我个人更喜欢另一种方法。Apache Commons-commons lang有ObjectUtils.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
我认为这str.equals("exit")
是编写比较的更自然的方式,但会抛出一个NullPointerException
ifstr
为 null,而"exit".equals(str)
只会评估为 false。
您需要知道为什么str
可以为空。空值可能是由程序中其他地方的错误或错误引起的,例如,您最好null
单独检查而不是忽略它,或者事先确保它不为空。
我更喜欢:
"exit".equals(str)
只是为了避免NullPointerException
。
您将使用以下方法躲避 NullPointerException
案例:
"exit".equals(str)