为什么使用 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
.
看过前辈们的各种代码,很多人都用过这个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
.