我看到过许多前辈的代码,他们在许多地方都使用了这个语句。它有什么影响?为什么他们不能包括 anything != null
。下面这件事也是如此:
"true".equals(x)
。
为什么会这样呢?
anything != null
和null != anything
完全等价。
另一方面,使用"true".equals(x)
可以避免在执行x.equals("true")
时检查x
是否为null。
将常量放在等式表达式的左侧是为了避免NullPointerException
,即使变量为null。这也提高了表达式的可读性。
话虽如此,null!=something
是个人选择,我更喜欢使用something!=null
。
这是两种不同的实践方法。
在与 null 进行比较时,使用左侧的 null
可以确保您不会错误地使用 =
而不是 ==
。然而,这是从其他语言中借鉴来的做法,在 Java 中,表达式
if ( something = null )
由于没有解析为布尔值,该操作将会失败。在其他语言中,使用实际上是指针的值作为条件可能是可允许的。
因此,在Java中这种做法是毫无意义的。
如你所说,第二个做法是为了防止NullPointerException
。需要注意的是,这种做法是有争议的,因为它允许null
传播到程序的后面,通常这意味着当null
引起错误时,它将更难被发现。
NullPointerException
)。这是防御性编程的关键方面。something != null
是同样的意思
null != something
"true".equals(x)
避免了在执行x.equals("true")
时检查x是否为null的需要,因此你可以节省一行代码。=
或!
而导致的意外赋值,例如foo = null
。相反,null = foo
甚至不能编译。foo != null
在逻辑上等同于null != foo
。foo = null
用于 if
/while
语句内部或分配给 boolean
变量,它也无法编译。 - Tagir Valeev似乎有些人更喜欢使用 null != anything
,因为 anything
可能是一个相当长的表达式,所以先写 null
可以在窄窗口中使其可见,并简化代码阅读(“好的,我们只是检查某个东西不是 null”)。但这完全是一种风格问题。
至于 "true".equals(x)
,@manouti 已经很好地解释了。