Java如果优化

mat*_*ias 4 java

我有以下声明:

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)