访谈:Java Equals

我在面试中被问到这个问题。 以下哪一项更好用?

MyInput.equals("Something"); 

要么

 "Something".equals(MyInput); 

谢谢

我会去的

 "Something".equals(MyInput); 

在这种情况下,如果MyInput为null那么它不会抛出NullPointerException

这里我们确定equals()要调用的对象是NOT NULL

如果你期望从你的代码中得到NullPointerException来做出决定或者抛出/包装它,那么首先要去做。

没有性能影响

成为逆向… …. 🙂

如果MyInput为null,第一行可能会崩溃,但这只是一个代码方便的程序员(通常带有C hangover),当他们不想声明'MyInput'可以为null时。

如果使用第二个选项,那么这行可能不会导致NullPointerException,但下面的行可能会发生。

我相信,更好地了解variables的可能状态,而不是依赖一些简化良心的代码构造。

如果MyInputnull ,前者将引发一个NullPointerException ,而后者只会返回false ,所以在某些情况下后者可能更可取(或者前者,如果您不希望MyInput为空并想快速失败) 。

如果你想成为一个真正的smarty-pants,你可以指出MyInput可能是String的一个特殊的子类,它已经覆盖了equalshashcode方法。 在这种情况下,声明的顺序非常重要。

这里有一个真实的例子 – 如果你想比较在它们中有数字的string,而你想要忽略前导零,那怎么样? 例如, Lecture1将等于Lecture01

那么我们如何将整个代码写下来进行更改呢?

那些首先喜欢常数的人,当他们看到这个时,他们会有什么感觉?

 if ( 2 == i) 

隐藏NullPointerException,在我看来,从来不是一个好处,而是devise中的一个缺点。

如果你永远不会期望一个NullPointerException但得到一个,那么你需要让你的应用程序吹,跟随日志,看看为什么发生这种情况。 这可能是一个商业案例,你完全错过了:)

如果您可以select期望一个空参数并且对分别处理它不感兴趣,那么使用一个像StringUtils.equals(…)

也就是说,我绝不允许我的团队成员使用第二种forms,因为它不一致,不可读。

我会去“东西”.equals(myInput); 因为variables可以是null,如果variables为null,它会抛出一个exception。

一个好的开发人员总是会尽量避免NullPointerException ,因此最好的答案是使用"Something".equals(myInput)