java - 检查空值样式的变量

标签 java

我有 2 个 java 语句:

if(myvar!=null)

if(null!=myvar)

有人说第二种形式更好,因为它有助于避免 NPE,这是真的吗? java中一般用什么比较好?

最佳答案

if(myvar!=null)

if(null!=myvar)

Some people says that second form is better because it helps to avoid NPEs, is it true?

没有。这些是完全一样的,这里不存在需要避免的 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)

如果myvarBoolean ,那么第一个表单将编译,第二个表单则不会。因此,第二种形式似乎更安全。但是,对于任何其他变量类型,这两种形式都不会编译。即使在 Boolean 的情况下,损害是非常有限的,因为无论 myvar 的值如何,当 if 时,程序将总是崩溃并出现 NPE。由于拆箱 null 已达到声明值。

由于任何测试都无法通过此语句,并且您不应该发布未经测试的代码,因此犯这样的错误是不现实的。

简而言之,安全效益非常小,几乎不存在,因此我认为没有理由喜欢这种不寻常的写作风格。

更新

@Nitek在评论中指出,采用第二种形式的一个优点可能是如果你养成习惯,这样当你用其他语言编程时 myvar = null可能会编译,出于你的“好习惯”,你会稍微安全一些。

我仍然要指出,在许多语言中与 null 进行比较很特殊,不可能出现这种拼写错误。例如,在 Python 中,myvar == None不正确,应写为myvar is None ,所以没有了 ==打字错误。

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

关于java - 检查空值样式的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467086/

相关文章:

java - Netbeans:更改 JAR 生成的主类,同时排除原始主类

java - 无法从池中获取资源 JedisConnectionException

java - 将大流转换为字符串时内存不足

java - 在 Spring Security 中同时拥有 Servlet Filter 和 AuthenticationProvider 有什么意义?

java - 如何配置 Bean 原型(prototype)范围提供程序以在 Bean 创建时使用 session 信息?

java - java中需要的复杂正则表达式帮助

java - spring 3.2.4 应该使用哪个版本的 mybatis 和 mybatis-spring jar?

Java XML : how to escape '&' , 但跳过 '&amp;'

java - 使用单独的线程更新全局 HashMap 时出现空指针异常

java - XPath:如何正确实现XpathResolver