我一直在阅读我使用的API实现的源代码,并偶然发现了这部分代码:
if (condition1 & condition2 && (condition3 || condition4))
Run Code Online (Sandbox Code Playgroud)
条件1和2不会调用任何方法或执行任何操作,而3和4则不会.我想知道为什么程序员决定不使用短路&&运算符来比较前两个语句,因为我看不到使用它的任何好处(还有一个条件要检查,另外两个条件可能对其他条件有任何影响)部分程序仍然是短路的.
我能想到的唯一理由就是避免与之相关的分支&&.你可以在字节码中看到这个:
a & b:
ILOAD 1
ILOAD 2
IAND
Run Code Online (Sandbox Code Playgroud)
a && b:
ILOAD 1
IFEQ L3
ILOAD 2
IFEQ L3
ICONST_1
GOTO L4
Run Code Online (Sandbox Code Playgroud)
当然有可能在某些情况下结果&略胜一筹&&(特别是当你几乎可以确定第一个条件是真的时).然而,&&通常是优选的,因为1)这种情况很少见,2)在大多数情况下,性能差异可以完全忽略不计.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |