我的老板说我应该使用null == obj
,因为它比obj == null
好,但他不记得为什么要这样做。有没有理由使用null == obj
?
我感觉到它......对面!
在Google上进行一些搜索后,我发现的唯一一件事就是:
在C中,它可以防止你在条件结构中不小心输入(obj = null)。
答案 0 :(得分:36)
您不能通过键入null
来意外地将obj
分配给obj = null
。但是,这是C次的回忆,在java中,这是不可能的,因为=
表达式返回赋值的右侧。由于null
不是boolean
,编译器会抱怨。
我会尝试向老板解释一次,展示它。如果他仍然不同意你,那就去做吧。与老板争吵是件小事。
答案 1 :(得分:17)
如果使用if(null==obj)
编译文件,则生成的字节代码为if_acmpne
,如果为if(obj==null)
,则为ifnonnull
。现在在if_acmpne
中,两个操作数从堆栈中弹出并检查它们不相等(在本例中为null
和obj
),在ifnonnull
中,只弹出一个操作数并检查它是否为空。由此看来ifnonnull
更好,因为它只涉及弹出一个操作数。
答案 2 :(得分:11)
在Java中,没有区别。
我更喜欢(obj == null)因为感觉更自然。
答案 3 :(得分:1)
我之前从未听说过这个,但似乎你给出的推理是可靠的。我也认为它感觉倒退但是,除了“感觉”错误之外,它不应该有任何问题。我认为它没有任何性能优势或类似的东西。
答案 4 :(得分:1)
如果您在当前的Java IDE中传递了if (obj=null)
或if (null=obj)
这样的条件,它会将其突出显示为语法错误。此外 - 尝试编译将发出错误信号。
(obj==null)
和(null==obj)
都可以接受,它们都带有相同的开销,后者不会产生任何性能。使用它们的决定取决于为跨类维护统一风格而采用的代码风格。
答案 5 :(得分:0)
:)
我发现对此有用的一件事是,以下语法(从我的POV绝对有效)不会引起spotbugs
'DC-DOUBLECHECK
警告,允许提高spotbugs
阈值而不会任何特殊排除等:
if (defaultClient == null) {
synchronized (DEFAULT_CLIENT_INIT_LOCK) {
if (null == defaultClient) {
...
}
}
}