2

我在某人的代码中看到了很多:空检查条件是这样写的:

if (null == value)

而不是

if (value == null)

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

4

7 回答 7

11

这是所谓的“尤达条件”(项目#1)的一个案例。尽管可以在 C/C++ 中合理化它们,但没有理由在 Java 中使用它们。

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

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

代替

if (var == NULL)

是新手常见的错误。Yoda 条件被认为是解决这个问题的一种补救措施,但代价是“Yodifying”你的代码:C/C++ 将捕获分配给NULL

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

但是“反向”NULL检查是可以的:

if (NULL == var)

if由于 Java 将、while和的控制块内的非布尔表达式for视为错误,因此它将var = null代替捕获var == null,从而触发错误。因此,没有理由通过“Yodifying”你的表达来放弃可读性。

于 2012-12-05T17:19:20.927 回答
2

假设您只想打印长度超过 20 的字符串的内容。您将执行以下操作:

if (str != null && str.length() > 20) {
    System.out.println(str);
}

如果实际上是,则忽略它str != null &&会引发 NPE 。strnull

如果您指的是差异

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

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

空无一人。

于 2012-12-05T17:20:16.247 回答
1

答案是不!在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)会是一个语法错误。
所以不要(null == value)在java中 使用它

于 2012-12-05T17:21:42.427 回答
1

有时它可能会更好读

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

对比

if( someFunction(someParameter, anotherParameter) == null )
于 2012-12-05T17:25:03.543 回答
0

它通常是开发人员母语的产物。有些语言的规则null == valuevalue == null. 在语法上,它们与 Java 相同。

于 2012-12-05T17:19:45.773 回答
0

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

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

两个都

if (a = null)

if (a == null)

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

如果你翻转它们,

if (null = a)

不会编译,而

if (null == a) 

将编译。

因此,您可以在编译器时捕获一个小而难以发现的错误。

于 2012-12-05T17:19:52.423 回答
0

只是为了确保您没有为例如您分配一个值,例如value = null如果您省略 ==,则此代码将编译得很好,并且只能在运行时识别它,但如果您这样尝试,null = value这甚至不会编译。

于 2012-12-05T17:20:31.810 回答