我有2个java语句:
if(myvar!=null) if(null!=myvar)
有人说第二种形式更好,因为它有助于避免NPE,这是真的吗?通常在java中使用什么?
if(myvar!=null) if(null!=myvar)有人说第二种形式更好,因为它有助于避免NPE,这是真的吗?
不.这些完全相同,这里没有NPE的风险可以避免.
也许你把这个例子弄糊涂了:
if (myvar.equals("something")) if ("something".equals(myvar))
这里,如果myvar
是null
,第一个表单将抛出一个NPE,因为.equals
它将取消引用一个null
值,但第二个表单工作得很好,因为.equals
执行String
处理一个null
参数优雅,false
在这个例子中返回.因此,在此示例中,通常建议使用第二种形式.
一个相关的论点,其中一个是首选?
if (myvar == null) if (null == myvar)
考虑一个拼写错误的可能性,写一个=
而不是==
:
if (myvar = null) if (null = myvar)
如果myvar
是a Boolean
,那么第一个表单将编译,第二个表单将不会.所以看起来第二种形式似乎更安全.但是,对于任何其他变量类型,两种形式都不会编译.即使在a的情况下Boolean
,损坏也是非常有限的,因为无论值如何,由于取消装箱值myvar
,程序在到达语句时将始终与NPE一起崩溃.if
null
由于没有任何测试可以通过此声明,并且由于您不应该发布未经测试的代码,因此犯这样的错误是不现实的.
简而言之,安全利益非常小,几乎不存在,所以我没有理由不喜欢这种不寻常的写作风格.
更新
正如@Nitek在评论中所指出的那样,采用第二种形式的一个好处就是如果你养成了习惯,那么当你用其他语言进行编程时,你myvar = null
可能会更安全一些".
我仍然指出,在许多语言中,比较null
是特殊的,不存在这种拼写错误的可能性.例如在Python中,myvar == None
是不正确的,应该写成myvar is None
,所以没有更多==
的错误输入.
严格来说,虽然null = myvar
写作风格不会用所有语言保护你,但它可能在某些方面保护你,所以我不得不承认这似乎是一个好习惯.