Apa*_*che 41 java null if-statement
在Java中,哪个更有效,有什么区别?
if (null == variable)
Run Code Online (Sandbox Code Playgroud)
要么
if (variable == null)
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 67
(与此问题类似:null == object和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
Run Code Online (Sandbox Code Playgroud)
用于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
Run Code Online (Sandbox Code Playgroud)
正如@Bozho所说,variable == null是最常见,默认和首选的风格.
然而,对于某些情况,我倾向于把它null放在前面.例如,在以下情况中:
String line;
while (null != (line = reader.readLine()))
process(line);
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 16
没有不同.
if (variable == null) (imo)是一种更好的编程风格.
请注意,nullJava 中是小写的.
简短的回答:没有区别.
更长的答案:存在相当主观的风格差异.有些人认为常数应该在左侧的防守风格,以防万一你输错==成=.有些人认为常量应该是正确的,因为它更自然,更易读.
设计良好的语言与良好的编译器和静态分析工具相结合,可以最大限度地减少偏执,因此您应该编写最可读和最自然的代码,这将是右侧的常量.
请在下次使用搜索功能.
从性能的角度来看,没有实质性的区别。
但是……如果您打错了字并错过了一个等号字符怎么办?
foo = null; // assigns foo to null at runtime... BAD!
Run Code Online (Sandbox Code Playgroud)
相对
null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep
Run Code Online (Sandbox Code Playgroud)
这是支持在左侧使用 null 开始 if 测试的一个论点。
支持以 null 开始 if 测试的第二个论点是,代码的读者非常清楚他们正在查看 null 测试,即使等号右侧的表达式很冗长。
@aiooba 也指出了第二个论点:
但是,对于某些情况,我倾向于将 null 放在前面。例如在以下情况下:
String line;
while (null != (line = reader.readLine()))
process(line);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73544 次 |
| 最近记录: |