if(object == null)v if(null == object)之间的区别?

时间:2018-05-08 05:22:43

标签: java

两者有什么区别?哪一个更好?我在面试中被问过这个问题。

我能想到的唯一区别是,如果您想if(null == object)而忘记添加==并添加=,则不会对您的计划产生任何副作用。但如果你在做if(object = null)时犯了这个错误,那么你的程序就是吐司。

3 个答案:

答案 0 :(得分:1)

添加到Nayuki's answer,如果程序员错误输入= for ==,就像if(object = null)那样,仍然很少会出现编译错误,并且代码中会出现错误。

例如:if (boolean1 = boolean2),首先是赋值表达式,然后针对if条件求值。另一个有问题的代码是if (wrapperBool = null),其中wrapperBool是一个布尔包装类变量。它将在运行时抛出NullPointerException(NPE)。

但是作为Benny mentioned,应该在单元测试用例中预先记录错误输入。

答案 1 :(得分:0)

在Java编程语言中,if (object == null)if (null == object)这两个表达式完全相同,因为==运算符是可交换的。当用英语说话时,前一种符号被认为更自然,而后一种符号有一些支持者。

如果程序员为=错误键入==,如if (object = null),则这是Java中的编译时错误,因为条件表达式必须是boolean值,而不是Object。因此,if (object == null)if (null == object)同样可以抵御Java中的错误

但是在C和C ++中,整数,浮点和指针类型在条件表达式中被隐式强制转换为bool。编写if (object = null)将编译但做错了,而编写if (null = object)应该会触发编译时错误。

另请参阅:https://coderanch.com/t/489740/java/difference-null-object-object-null

答案 2 :(得分:0)

由于其commutative propertyobject == nullnull == objectYoda version)之间的唯一区别是认知性:代码如何由读者阅读和消化。我不知道确切的答案,但我知道我个人更喜欢将我检查的对象与其他东西进行比较,而不是将其他东西与我检查的对象进行比较< / em>,如果这是有道理的。从主题开始,然后将值与之比较。

在其他一些语言中,这种比较风格更有用。

为了安全防范失踪&#34; =&#34;但是,我认为写null == objectdefensive programming的错误行为。围绕这个特定代码的更好方法是通过junit测试来保证行为。请记住,错过&#34; =&#34;不依赖于方法的输入参数 - 您不依赖于其他人正确使用此API - 因此junit测试非常适合安全防范。无论如何,你会想要编写junit测试来验证行为;缺少&#34; =&#34;自然属于范围。

或许,这可能是一个棘手的问题,让你谈论讨论uses of Optional的主题,以避免原始的空检查?