我多次使用boolean equals(Object o)
来比较Strings
时,最好将常量放在函数的左侧,如下所示:
为什么会这样?
答案 0 :(得分:8)
因为如果myString
为null,则会出现异常。你知道"aString"
永远不会为空,所以你可以避免这个问题。
通常你会看到在任何地方都使用nullSafeEquals(myString,"aString");
的库以避免这种情况(因为大多数时候你比较对象,它们不是由编译器生成的!)
答案 1 :(得分:3)
这是一种防御NullPointerException
的防御技术。如果你的常数总是在左边,你就不可能在equals
电话上获得NPE。
答案 2 :(得分:1)
这是糟糕的设计,因为你隐藏了NullPointerExceptions。而不是被警告字符串为空,而是会得到一些奇怪的程序行为,并在其他地方抛出异常。
但是,这取决于'null'是否是字符串的有效状态。一般来说,'null'不应被视为传递的合理对象状态。