当前位置:  开发笔记 > 编程语言 > 正文

检查空值样式的变量

如何解决《检查空值样式的变量》经验,为你挑选了1个好方法。

我有2个java语句:

if(myvar!=null)

if(null!=myvar)

有人说第二种形式更好,因为它有助于避免NPE,这是真的吗?通常在java中使用什么?



1> Stop ongoing..:
if(myvar!=null)

if(null!=myvar)

有人说第二种形式更好,因为它有助于避免NPE,这是真的吗?

不.这些完全相同,这里没有NPE的风险可以避免.

也许你把这个例子弄糊涂了:

if (myvar.equals("something"))

if ("something".equals(myvar))

这里,如果myvarnull,第一个表单将抛出一个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一起崩溃.ifnull

由于没有任何测试可以通过此声明,并且由于您不应该发布未经测试的代码,因此犯这样的错误是不现实的.

简而言之,安全利益非常小,几乎不存在,所以我没有理由不喜欢这种不寻常的写作风格.

更新

正如@Nitek在评论中所指出的那样,采用第二种形式的一个好处就是如果你养成了习惯,那么当你用其他语言进行编程时,你myvar = null可能会更安全一些".

我仍然指出,在许多语言中,比较null是特殊的,不存在这种拼写错误的可能性.例如在Python中,myvar == None是不正确的,应该写成myvar is None,所以没有更多==的错误输入.

严格来说,虽然null = myvar写作风格不会用所有语言保护你,但它可能在某些方面保护你,所以我不得不承认这似乎是一个好习惯.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有