我在某人的代码中看到了很多:空检查条件是这样写的:
if (null == value)
而不是
if (value == null)
我认为没有任何理由null
在 Java 中使用运算符。这样做有什么好处吗?这仅仅是一个 C++ 程序员错误地将他的技能应用于 Java 的案例,还是我错过了一些重要的东西?
我在某人的代码中看到了很多:空检查条件是这样写的:
if (null == value)
而不是
if (value == null)
我认为没有任何理由null
在 Java 中使用运算符。这样做有什么好处吗?这仅仅是一个 C++ 程序员错误地将他的技能应用于 Java 的案例,还是我错过了一些重要的东西?
这是所谓的“尤达条件”(项目#1)的一个案例。尽管可以在 C/C++ 中合理化它们,但没有理由在 Java 中使用它们。
在 C/C++ 中,任何类型的表达式都可以进入if
s 和while
s。写作
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”你的表达来放弃可读性。
假设您只想打印长度超过 20 的字符串的内容。您将执行以下操作:
if (str != null && str.length() > 20) {
System.out.println(str);
}
如果实际上是,则忽略它str != null &&
会引发 NPE 。str
null
如果您指的是差异
if (str == null) { ... }
和
if (null == str) { ... }
空无一人。
答案是不!在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中 使用它
有时它可能会更好读
if( null == someFunction(someParameter, anotherParameter) )
对比
if( someFunction(someParameter, anotherParameter) == null )
它通常是开发人员母语的产物。有些语言的规则null == value
比value == null
. 在语法上,它们与 Java 相同。
不检查可能意味着空指针异常。
将它按此顺序放置有助于您不会混淆 =(赋值)和 ==(相等)。
两个都
if (a = null)
和
if (a == null)
将编译;但是,您可能想要第二个而不是第一个。
如果你翻转它们,
if (null = a)
不会编译,而
if (null == a)
将编译。
因此,您可以在编译器时捕获一个小而难以发现的错误。
只是为了确保您没有为例如您分配一个值,例如value = null
如果您省略 ==,则此代码将编译得很好,并且只能在运行时识别它,但如果您这样尝试,null = value
这甚至不会编译。