为什么是我的String.equals(“String”);不同于“一个字符串”.equals(String);?

时间:2011-09-28 00:29:01

标签: java string equals

我多次使用boolean equals(Object o)来比较Strings时,最好将常量放在函数的左侧,如下所示:

  • 错误:myString.equals(“aString”);
  • 好:“aString”.equals(myString);

为什么会这样?

3 个答案:

答案 0 :(得分:8)

因为如果myString为null,则会出现异常。你知道"aString"永远不会为空,所以你可以避免这个问题。

通常你会看到在任何地方都使用nullSafeEquals(myString,"aString");的库以避免这种情况(因为大多数时候你比较对象,它们不是由编译器生成的!)

答案 1 :(得分:3)

这是一种防御NullPointerException的防御技术。如果你的常数总是在左边,你就不可能在equals电话上获得NPE。

答案 2 :(得分:1)

这是糟糕的设计,因为你隐藏了NullPointerExceptions。而不是被警告字符串为空,而是会得到一些奇怪的程序行为,并在其他地方抛出异常。

但是,这取决于'null'是否是字符串的有效状态。一般来说,'null'不应被视为传递的合理对象状态。