有没有理由在java中使用null == value condition?

时间:2012-12-05 17:16:32

标签: java

我在某人的代码中看到了很多:null-check条件是这样写的:

if (null == value)

而不是

if (value == null)

我认为没有任何理由让null位于Java中的运算符之前。这样做有什么好处吗?这只是一个C ++程序员错误地将他的技能应用于Java的情况,还是我错过了一些重要的东西?

7 个答案:

答案 0 :(得分:11)

这是所谓的"Yoda Conditions" (item #1)的情况。尽管可以在C / C ++中对它们进行合理化,但没有理由在Java中使用它们。

在C / C ++中,任何类型的表达式都可以进入ifwhile。写

if (var = NULL) // No compile-time error in C/C++

而不是

if (var == NULL)

是新手之间的常见错误。据说Yoda条件是解决这个问题的一种补救办法,代价是“代码化”你的代码:C / C ++将分配给NULL

if (NULL = var) // Compile-time error

但“反向”NULL检查没问题:

if (NULL == var)

由于Java认为ifwhilefor的控制块内的非布尔表达式是错误的,因此它将var = null代替{{1}触发错误。因此,没有理由通过“yodifying”你的表达来放弃可读性。

答案 1 :(得分:2)

假设您只想打印字符串的内容,如果它超过20个。您将执行此操作:

if (str != null && str.length() > 20) {
    System.out.println(str);
}
如果str != null &&实际上是str,则

忽略此null会抛出NPE。

如果你指的是

的区别
if (str == null) { ... }

if (null == str) { ... }

没有。

答案 2 :(得分:1)

答案是否定的!
absolutley不需要在java中更喜欢if (null == value)而不是if (value == null)

if (null == value)的检查,有点奇怪,至少在java中,来自C和C ++中的代码指南,这是有意义的。

我更喜欢if (value == null)更具可读性。

原因是避免C / C ++错误if (value = null)而不是正确的if (value == null)

如果使用if (null = value),C / C ++编译器将抛出错误。

然而在java中,即使if (value = null)也会出现语法错误 所以不要在java中使用(null == value)

答案 3 :(得分:1)

有时可能会读得更好

if( null == someFunction(someParameter, anotherParameter) )

VS

if( someFunction(someParameter, anotherParameter) == null )

答案 4 :(得分:0)

它通常是开发人员母语的工件。有些语言的规则使null == valuevalue == null更自然。从语法上讲,它们与Java相同。

答案 5 :(得分:0)

检查可能意味着空指针异常。

按此顺序放置它有助于您不要将=(赋值)与==(相等)混淆。

两个

if (a = null)

if (a == null)

将编译;但是,你可能想要第二个而不是第一个。

如果你翻转它们,

if (null = a)

将无法编译,而

if (null == a) 

将编译。

因此,您可以在编译时捕获一个很小的,很难找到的错误。

答案 6 :(得分:0)

只是为了确保你没有为value = null分配一个值,如果你省略==所以这段代码编译得很好,只能在运行时识别它,但如果你这样做null = value 1}}这甚至不会编译。