在Java中,哪个更有效,有什么区别?
if (null == variable)
或
if (variable == null)
答案 0 :(得分:65)
(类似于这个问题:Difference between null==object and object==null)
我想说这两个表达式之间的表现完全没有区别。
有趣的是,编译后的字节码(由OpenJDKs javac发出)对于这两种情况看起来有点不同。
boolean b = variable == null
:
3: aload_1 // load variable
4: ifnonnull 11 // check if it's null
7: iconst_1 // push 1
8: goto 12
11: iconst_0 // push 0
12: istore_2 // store
boolean b = null == variable
:
3: aconst_null // push null
4: aload_1 // load variable
5: if_acmpne 12 // check if equal
8: iconst_1 // push 1
9: goto 13
12: iconst_0 // push 0
13: istore_2 // store
正如@Bozho所说,variable == null
是最常见,默认和首选的风格。
但在某些情况下,我倾向于将null
放在前面。例如,在以下情况中:
String line;
while (null != (line = reader.readLine()))
process(line);
答案 1 :(得分:17)
这称为"Yoda Conditions",其目的是防止您意外使用分配(=
)而不是等同检查(==
)。
答案 2 :(得分:15)
没有区别。
if (variable == null)
是(imo)更好的编程风格。
请注意,null
在Java中是小写的。
答案 3 :(得分:12)
没有区别
(null == variables)
有时用于旧时代(C语言)
避免写作:
错误地(variable = NULL)
答案 4 :(得分:8)
简短的回答:没有区别。
更长的答案:存在相当主观的风格差异。有些人认为常量应该在左侧作为防御方式,以防您将==
输入错误=
。有些人认为常量应该是正确的,因为它更自然,更易读。
设计良好的语言与良好的编译器和静态分析工具相结合,可以最大限度地减少偏执,因此您应该编写最可读和最自然的代码,这将是右侧的常量。
请在下次使用搜索功能。
答案 5 :(得分:7)
第一个是从C挂起,写if(variable = NULL)
答案 6 :(得分:3)
从绩效角度来看,没有任何实质性差异。
然而......如果你输了一个拼写错误并且错过了一个等于一个角色怎么办?
foo = null; // assigns foo to null at runtime... BAD!
与
null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep
这是支持在左侧开始使用null的if测试的一个参数。
支持使用null开始if测试的第二个参数是,代码的读者非常清楚他们正在查看空测试,即使等号右边的表达式是详细的。
@aiooba也指出了第二个论点:
但是对于某些情况,我倾向于将null放在前面。对于 以下情况中的实例:
String line;
while (null != (line = reader.readLine()))
process(line);
答案 7 :(得分:1)
我的观点:不关心这种无关紧要的性能优化。如果性能不佳,请查找并定位代码中的实际问题/瓶颈。
答案 8 :(得分:-1)
没有任何区别。