哪个更有效:if(null == variable)或if(variable == null)?

时间:2010-06-11 08:11:14

标签: java null if-statement

在Java中,哪个更有效,有什么区别?

if (null == variable)

if (variable == null)

9 个答案:

答案 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)

没有任何区别。