【发布时间】:2011-03-02 13:28:22
【问题描述】:
在Java中,哪个会更有效,有什么区别?
if (null == variable)
或
if (variable == null)
【问题讨论】:
-
顺便说一句,Java 中是
null,而不是NULL -
@ryanprayogo - 可能是一个常数...
标签: java null if-statement
在Java中,哪个会更有效,有什么区别?
if (null == variable)
或
if (variable == null)
【问题讨论】:
null,而不是 NULL
标签: java null if-statement
(类似于这个问题: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);
【讨论】:
这称为"Yoda Conditions",目的是防止您意外使用赋值 (=) 而不是相等检查 (==)。
【讨论】:
没有区别。
if (variable == null) 是 (imo) 一种更好的编程风格。
请注意,null 在 Java 中是小写的。
【讨论】:
if (null == variable) 将是尤达风格:) 在这里解释:stackoverflow.com/questions/…
没有区别
(null == variables)
有时在过去的美好时光中使用(C语言)
避免写作:
(variable = NULL)错了
【讨论】:
简短回答:没有区别。
更长的答案:存在风格上的差异,这是相当主观的。有些人认为常量应该放在左边作为防御风格,以防你将== 输入错误=。有些人认为常量应该是正确的,因为它更自然和可读。
设计良好的语言结合良好的编译器和静态分析工具,可以最大限度地减少偏执,因此您应该编写最易读和最自然的代码,即右侧的常量。
下次请使用搜索功能。
【讨论】:
第一个是 C 的遗留问题,写 if(variable = NULL) 是完全合法的
【讨论】:
从性能的角度来看没有实质性差异。
但是...如果您打错字并遗漏了一个等号字符怎么办?
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 测试的第二个论点是,即使等号右侧的表达式很冗长,代码的读者也很清楚他们正在查看 null 测试。
@aiooba 也指出了第二个论点:
然而,对于某些情况,我倾向于将 null 放在前面。为了 以下情况的实例:
String line;
while (null != (line = reader.readLine()))
process(line);
【讨论】:
我的意见:不要在意这种微不足道的性能优化。如果性能不佳,请找出代码中的真正问题/瓶颈。
【讨论】:
没有任何区别。
【讨论】: