我在某人的代码中看到了很多:null-check条件是这样写的:
if (null == value)
而不是
if (value == null)
我认为没有任何理由让null
位于Java中的运算符之前。这样做有什么好处吗?这只是一个C ++程序员错误地将他的技能应用于Java的情况,还是我错过了一些重要的东西?
答案 0 :(得分:11)
这是所谓的"Yoda Conditions" (item #1)的情况。尽管可以在C / C ++中对它们进行合理化,但没有理由在Java中使用它们。
在C / C ++中,任何类型的表达式都可以进入if
和while
。写
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
代替{{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 == value
比value == null
更自然。从语法上讲,它们与Java相同。
答案 5 :(得分:0)
不检查可能意味着空指针异常。
按此顺序放置它有助于您不要将=(赋值)与==(相等)混淆。
两个
if (a = null)
和
if (a == null)
将编译;但是,你可能想要第二个而不是第一个。
如果你翻转它们,
if (null = a)
将无法编译,而
if (null == a)
将编译。
因此,您可以在编译时捕获一个很小的,很难找到的错误。
答案 6 :(得分:0)
只是为了确保你没有为value = null
分配一个值,如果你省略==所以这段代码编译得很好,只能在运行时识别它,但如果你这样做null = value
1}}这甚至不会编译。