Java が次のシナリオをどのように処理するかを知りたいです。
次のような Debug というクラスがあるとします。
public class Debug
{
private static final boolean isAssertEnabled = true;
public static void assertTrue(boolean b, String errorMessage) {
if (isAssertEnabled) {
if (!b) {
throw new RuntimeException(errorMessage);
}
}
}
}
私のコードに次のような呼び出しがあるとします。
...
Debug.assertTrue((x + y != z) && (v - u > w), "Some error message");
....
いくつかの質問を聞きたいんです:
- isAssertEnabledフラグがfalseに設定されている場合、 Debug.assertTrueへの呼び出し全体がコンパイルされますか? isAssertEnabled == true かどうかのチェックは、関数が呼び出された後に関数内でのみ行われることに注意してください。
- 呼び出し全体がコンパイルされた場合、それはブール式の評価もコンパイルされたことを意味しますか? その式をただで評価するのはもったいないでしょう。
助けてくれてありがとう!