我有 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))
这里,如果 myvar
是 null
,第一种形式会抛出 NPE,因为 .equals
将取消引用 null
值,但第二个效果很好,如 .equals
实现String
处理null
优雅地参数,返回 false
在这个例子中。因此,本例中一般推荐采用第二种形式。
一个相关的论点,其中哪一个是首选?
if (myvar == null) if (null == myvar)
考虑一下打字错误的可能性,写了一个=
而不是==
:
if (myvar = null) if (null = myvar)
如果myvar
是 Boolean
,那么第一个表单将编译,第二个表单则不会。因此,第二种形式似乎更安全。但是,对于任何其他变量类型,这两种形式都不会编译。即使在 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/