我见过我的老年人的各种代码,他们在很多地方使用过它。它有什么影响?为什么他们不能包括anything != null
。对于下面的事情也是如此
"true".equals(x)
。
为什么会这样?
答案 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很好地解释了这个问题。