访谈:Java Equals

时间:2011-04-19 05:44:25

标签: java

我在采访中被问到这个问题。以下哪项更适合使用

 MyInput.equals("Something");   

或者

"Something".equals(MyInput);

由于

7 个答案:

答案 0 :(得分:59)

我会去

"Something".equals(MyInput);

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

我们确信equals()将要调用的对象是NOT NULL

如果您希望代码中的NullPointerException做出某些决定或抛出/包装它,那就先去吧。

没有性能影响

答案 1 :(得分:21)

成为逆势者.... :)

如果MyInput为null,第一行可能会崩溃,但是当他们不想断言'MyInput'可以为null时,这只是代码方便的程序员(通常使用C宿醉)。

如果使用第二个选项,那么这行可能不会导致NullPointerException,但可能会出现以下行。

我相信更好地了解变量的可能状态,而不是依赖一些能够减轻你良心的代码构造。

答案 2 :(得分:3)

如果NullPointerExceptionMyInput,前者会提出null,而后者只会返回false,因此后者在某些情况下(或可能更好)前者,如果您不希望MyInput为null并且想要快速失败)。

答案 3 :(得分:2)

那么我们如何将整个代码颠倒过来进行更改呢?

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

if ( 2 == i) 

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

如果你从来没有想过NullPointerException但得到一个,那么你需要让你的应用程序爆炸,按照日志查看为什么会发生这种情况。这可能是你完全错过的商业案例:)

如果你可选地期望一个null参数并且不想单独处理它,那么使用像StringUtils.equals(...)这样的实用方法

那就是说,我从不允许任何团队成员使用第二种形式,因为它不一致且不可读。

答案 4 :(得分:1)

如果你想成为一个真正的聪明人,你可以指出MyInput可能是一个特殊的String子类,它已经超越了equalshashcode方法。在这种情况下,陈述的顺序非常重要。

这是一个真实的例子 - 如果你想比较其中包含数字的字符串并且你想要忽略前导零怎么样?例如,Lecture1将等于Lecture01

答案 5 :(得分:-2)

我会去“某事”.equals(myInput);因为变量可以为null,所以如果变量为null,则抛出异常。

答案 6 :(得分:-4)

优秀的开发人员总是会尝试避免NullPointerException,因此最好的答案是使用"Something".equals(myInput)

相关问题