访谈: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的可能状态,而不是依赖一些简化良心的代码构造。
如果MyInput
为null
,前者将引发一个NullPointerException
,而后者只会返回false
,所以在某些情况下后者可能更可取(或者前者,如果您不希望MyInput为空并想快速失败) 。
如果你想成为一个真正的smarty-pants,你可以指出MyInput
可能是String的一个特殊的子类,它已经覆盖了equals
和hashcode
方法。 在这种情况下,声明的顺序非常重要。
这里有一个真实的例子 – 如果你想比较在它们中有数字的string,而你想要忽略前导零,那怎么样? 例如, Lecture1
将等于Lecture01
。
那么我们如何将整个代码写下来进行更改呢?
那些首先喜欢常数的人,当他们看到这个时,他们会有什么感觉?
if ( 2 == i)
隐藏NullPointerException,在我看来,从来不是一个好处,而是devise中的一个缺点。
如果你永远不会期望一个NullPointerException但得到一个,那么你需要让你的应用程序吹,跟随日志,看看为什么发生这种情况。 这可能是一个商业案例,你完全错过了:)
如果您可以select期望一个空参数并且对分别处理它不感兴趣,那么使用一个像StringUtils.equals(…)
也就是说,我绝不允许我的团队成员使用第二种forms,因为它不一致,不可读。
我会去“东西”.equals(myInput); 因为variables可以是null,如果variables为null,它会抛出一个exception。
一个好的开发人员总是会尽量避免NullPointerException
,因此最好的答案是使用"Something".equals(myInput)
。