为什么使用 null != anything 而不是 anything!=null?

why use null != anything instead of anything!=null?

看过前辈们的各种代码,很多人都用过这个places.What效果怎么样?为什么他们不能包括 anything != null。下面的事情也是如此

"true".equals(x).

为什么会这样?

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

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

something != null

相同
null != something

这完全是个人喜好问题。正如@manouti 上面解释的那样,"true".equals(x) 避免了在执行 x.equals("true") 时检查 x 是否为 null 的需要,因此您节省了一行代码。

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

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

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

也就是说,null!=something 是个人选择,我更喜欢使用 something!=null

好像有人更喜欢null != anything,因为anything可能是很长的表达式,所以先写null使其在窄window中可见并简化代码阅读("ok, we just check if something is not null")。但这完全是风格问题。

至于"true".equals(x),@manouti解释的很好

这是两种不同的做法。

在与 null 比较时在左侧使用 null 可确保您不会错误地使用 = 而不是 ==。然而,这是从 Java 以外的语言中获取的实践,如 Java 表达式

if ( something = null ) 

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

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


如您所知,第二种做法与防止 NullPointerException 有关。需要注意的是,这种做法是有争议的,因为它允许一个 null 传播到程序的后面一点,这通常意味着当它导致错误时将更难找到。

这叫做Yoda condition。除其他事项外,它有助于防止由于缺少 =! 而导致的意外赋值,例如 foo = null。相反,null = foo,甚至无法编译。

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