在检查两个Java String
的相等性时,我已经看到了这两个:
// Method A
String string1;
// ...
if("MyString".equals(string1)) {
// ...
}
和
// Method B
String string1;
// ...
if(string1.equals("MyString")) {
// ...
}
我的问题是:哪一个更好,更广泛使用?
答案 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)
但没有具体原因。但出于不同的原因。 (其他人指出的空指针)。