我在某人的代码中看到了很多这样的情况: null-check条件是这样写的:
if (null == value)而不是
if (value == null)我认为在Java语言中,没有任何理由让null放在运算符之前。这样做有什么好处吗?这只是一个C++程序员错误地将他的技能应用到Java语言的案例,还是我错过了什么重要的东西?
发布于 2012-12-06 01:19:21
这是一个所谓的"Yoda Conditions" (item #1)的案例。虽然在C/C++中可以使它们合理化,但在Java中没有理由使用它们。
在C/C++中,任何类型的表达式都可以进入ifs和whiles。
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将if、while和for控制块中的非布尔表达式视为错误,因此它将捕获var = null而不是var == null,从而触发错误。因此,没有理由通过"Yodifying“来放弃表达式的可读性。
发布于 2012-12-06 01:20:16
假设你只想打印长度超过20的字符串的内容,你可以这样做:
if (str != null && str.length() > 20) {
System.out.println(str);
}如果str实际上是null,省略这个str != null &&将抛出一个NPE。
如果您指的是
if (str == null) { ... }和
if (null == str) { ... }没有。
发布于 2012-12-06 01:21:42
答案是否定的!
在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)
https://stackoverflow.com/questions/13728739
复制相似问题