Java で次のメソッドを検討してください。
public static boolean expensiveComputation() {
for (int i = 0; i < Integer.MAX_VALUE; ++i);
return false;
}
そして、次の主な方法:
public static void main(String[] args) {
boolean b = false;
if (expensiveComputation() && b) {
}
}
論理積 (&& と同じ) は可換演算です。では、コンパイラが if ステートメント コードを同等のものに最適化しないのはなぜですか。
if (b && expensiveComputation()) {
}
短絡評価を使用する利点はどれですか?
さらに、コンパイラは、より高速なコードを生成するために、他のロジックの単純化やブール値の置換を試みますか? そうでない場合、なぜですか?確かにいくつかの最適化は非常に難しいでしょうが、私の例は単純ではありませんか? メソッドの呼び出しは、ブール値の読み取りよりも常に遅くなるはずですよね?
前もって感謝します。