我有以下声明:
isEnabled = false;
if(foo(arg) && isEnabled) {
....
}
public boolean foo(arg) {
some really long running code
}
Run Code Online (Sandbox Code Playgroud)
在if中交换语句是否有意义?
if(isEnabled && foo(arg)) { ... }
Run Code Online (Sandbox Code Playgroud)
或者编译器是否为我优化?
ami*_*mit 12
请注意,如果两个表达式foo()也有副作用,则它们的行为不同.
如果它正在操作程序的状态,那么如果你总是调用它,或者只是作为值的依赖项调用它,它会产生很大的不同isEnabled.
例如,考虑:
boolean foo(Object arg) {
someLocalVariable = arg;
//do some calculation and return an answer
}
Run Code Online (Sandbox Code Playgroud)
如果你总是调用它foo(),或者只是在isEnabled打开的情况下调用它,这会导致以下两个表达式彼此完全不同,这很重要:
if (isEnabled && foo(arg)) { ...} //local variable changes only if isEnabled==true
if (foo(arg) && isEnabled) { ...} //local variable always changes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |