为什么要使用null!=任何东西而不是任何东西!= null?

时间:2015-06-02 17:53:12

标签: java null equals

我见过我的老年人的各种代码,他们在很多地方使用过它。它有什么影响?为什么他们不能包括anything != null。对于下面的事情也是如此

"true".equals(x)

为什么会这样?

6 个答案:

答案 0 :(得分:9)

anything != null完全等同于null != anything

另一方面,"true".equals(x)避免在执行x时检查x.equals("true")是否为空。

答案 1 :(得分:2)

在equals表达式的左侧包含常量的原因是即使变量为null也要避免NullPointerException。这也提高了表达式的可读性。

话虽如此,null!=something是个人选择,我更喜欢使用something!=null

答案 2 :(得分:2)

这是两个不同的做法。

在与null比较时,使用左侧的null可确保您错误地使用=代替==。但是,这是一种从Java以外的语言中获取的做法,如Java中的表达式

if ( something = null ) 

将失败,因为它没有解析为布尔值。在其他语言中,可以允许使用其值实际上是指针的条件。

因此,这种做法在Java中没有意义。

正如您所说,第二种做法与阻止NullPointerException有关。应该注意的是,这种做法存在争议,因为它允许null传播到程序中的后一点,这通常意味着在它导致错误时更难找到。

答案 3 :(得分:1)

该检查是这样的,程序确保在读取之前已初始化有问题的变量。如果一个程序试图访问一个null变量,它将崩溃(特别是在Java中它会抛出一个NullPointerException)。这是防御性编程的一个重要方面。

就排序而言,评估某事物是否为空是可交换的。含义:

something != null

相同
null != something

这完全取决于个人喜好。正如@manouti上面解释的那样,"true".equals(x)避免在执行x.equals("true")时检查x是否为空,因此您需要保存一行代码。

答案 4 :(得分:1)

这称为Yoda condition。除此之外,它有助于防止由于=!丢失导致意外分配,如foo = null。相反,null = foo甚至不会编译。

那就是说,纯粹是一种风格偏好。 foo != null在逻辑上等同于null != foo

答案 5 :(得分:0)

似乎有些人更喜欢null != anything,因为anything可能是一个很长的表达式,所以首先编写null会使它在狭窄的窗口中可见并简化代码阅读("好吧,我们只检查某些东西是否为空")。但这完全是一种风格问题。

至于"true".equals(x),@ manouti很好地解释了这个问题。