Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
采访:Java Equals_Java - Fatal编程技术网

采访:Java Equals

采访:Java Equals,java,Java,我在采访中被问到这个问题。以下哪一项更适合使用 MyInput.equals("Something"); 或 谢谢我愿意 "Something".equals(MyInput); 在这种情况下,如果MyInput为null,则不会抛出NullPointerException 在这里,我们可以确定equals()将要调用的对象是非NULL 如果您希望代码中的NullPointerException做出一些决定或抛出/包装它,那么请先执行 没有性能影响如果MyInput为null,前者将

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

 MyInput.equals("Something");   

谢谢

我愿意

"Something".equals(MyInput);
在这种情况下,如果MyInput为
null
,则不会抛出
NullPointerException

在这里,我们可以确定
equals()
将要调用的对象是
非NULL

如果您希望代码中的
NullPointerException
做出一些决定或抛出/包装它,那么请先执行


没有性能影响

如果
MyInput
null
,前者将引发
NullPointerException
,而后者只会返回
false
,因此在某些情况下后者可能更可取(或者,如果您不希望MyInput为null并且希望快速失败,则可能是前者).

成为反向者……)

如果MyInput为null,第一行可能会崩溃,但这只是程序员(通常带有C残留)在不想断言“MyInput”可以为null时使用的一种代码便利

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


我认为最好了解变量的可能状态,而不是依赖于某种代码结构来减轻你的良心。

我会转到“something”。equals(myInput);因为变量可以为null,所以如果变量为null,它会抛出异常

如果你想成为一个真正聪明的人,你可以指出
MyInput
可能是字符串的一个特殊子类,它超越了
equals
hashcode
方法。在这种情况下,语句的顺序至关重要


下面是一个现实生活中的例子——如果您想比较包含数字的字符串,并且希望忽略前导零,那该怎么办?例如,
讲师1
等于
讲师01
一个好的开发人员总是试图避免出现
NullPointerException
,因此最好的答案是使用
“Something”。equals(myInput)
那么我们把整个代码颠倒过来写一下怎么样

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

if ( 2 == i) 
在我看来,隐藏NullPointerException在设计中不是一个优点,而是一个缺点

如果您从未期望出现NullPointerException,但却得到了一个NullPointerException,那么您需要让您的应用程序崩溃,按照日志进行操作,看看为什么会发生这种情况。这可能是一个你完全错过的商业案例:)

如果您希望有一个空参数,并且不想单独处理它,那么可以使用如下实用程序方法


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

尽管第二种解决方案对
MyInput
为空(正如其他人在回答中指出的那样)很有效,但我确实认为第一种解决方案在可读性方面更好(如果你能确保MyInput为非空)。我们真的知道
MyInput
是什么类型吗?是的,我还在考虑我的宿醉。。。有时我可能希望
MyInput
为空,这没关系。它确实有用处;)假设null值不是myInput的有效值,而假设它将导致进一步的NPE。如果没有更多的信息,这不是一个假设。我以前是用
null
的方式写的。但是,当我启动Java时,我曾经接受
null
来表示一个空集合。NPE太普遍了
null
在代码上下文中是非常没有意义的。因此,最好避免
null
s,这意味着检查。与此相关的是,不要试图掩盖任何错误。如果您知道
myInput
可能是
null
,请通过编写
myInput!=null&&myInput.equals(“某物”)
。是的,篇幅更长,但信息量大得多,值得一读。现在,读者知道
myInput
可能为空(如果您要修改代码,则需要掌握基本知识),并且知道您已经考虑过它。或者如果你坚持它很短,
Objects.equals(myInput,“Something”)
。你必须使用不同的方法或
比较器
,因为
字符串不能被子类化,Smartypants先生。@Slanec没有说
myInput
实际上是一个字符串。(那么为什么它不能是String的子类,它可以是其他任何东西(即使是原语,在这种情况下第一个案例不编译))。所以你基本上用2011年4月被接受的答案所说的同样的东西回答了一个有一年历史的问题?!一个“优秀的开发人员”会在调用之前检查null,或者更喜欢异常,而不是让它默默地失败,并以一种不太可预测的方式潜在地引入bug。更重要的是,第一种方法更具可读性,也更自然。“一个好的开发人员总是会试图避免NullPointerException”-这是你的提线吗?另一种避免NullPointerException的方法是让try…catch(Throwable)环绕在该区域:)如果一个变量是
null
,我不希望它是,我宁愿快速失败并被异常告知,也不愿意让它默默地失败,或者以更难调试的方式失败。第一个更具可读性和自然性,这是好代码的重要组成部分。我不相信这样的答案有这么多赞成票,而且被认为是正确的!这是一种很糟糕的做法——切换变量/常量值以避免NullPointerException是一种可怕的方式,它会导致生产中出现潜在的疯狂行为。如果您希望您的输入永远是空的,那么在字符串比较之前检查它。如果您从未期望它为null,那么需要在应用程序中严格执行此操作,以便进行调查
if ( 2 == i)