Java中的字符串相等

时间:2010-12-30 22:23:29

标签: java string coding-style

在检查两个Java String的相等性时,我已经看到了这两个:

// Method A
String string1;
// ...
if("MyString".equals(string1)) {
    // ...
}

// Method B
String string1;
// ...
if(string1.equals("MyString")) {
    // ...
}

我的问题是:哪一个更好,更广泛使用?

6 个答案:

答案 0 :(得分:10)

如果您确定string1永远不能为null,则选项2是可读且首选的。否则选项1.选项1的意图是避免潜在的空指针。

答案 1 :(得分:3)

方法B将在null string1上失败,并且NullPointerException,而方法A将永远不会抛出此。一些当局要求这种“防御性”节目。他们影响了我这样做,虽然它仍然没有自然而然!

也可以写

if (string1 != null && string1.equals("MyString")) ...

虽然像FindBugs这样的工具将此标记为可能的错误,但假设您应该确保string1已经为非null。 (你能依靠评估的顺序吗?)。

所以有不同的思想流派。

答案 2 :(得分:3)

方法A不会抛出空指针异常。两者中没有更好的。这取决于你是否希望它抛出一个npe(你可能在整体设计中想要它)。

答案 3 :(得分:0)

方法a不抛出NullPointerException,因此非常方便。它也被广泛使用。

答案 4 :(得分:0)

例外是异常处理,并且比检查错误条件和使用常规逻辑处理它们有更多的开销。如果你已经编程了十年,NPE是一个棘手的问题,通常表示粗心的代码。通过使用“常量”.equals(变量)来避免它们,阅读代码并使用它的人会更快乐。

答案 5 :(得分:-2)

第二种更广泛使用。两者都不是更好。

的想法相同
if (1 == x)

但没有具体原因。但出于不同的原因。 (其他人指出的空指针)。