Java: Устранение мертвого кода

Я хотел бы знать, как 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");
....

У меня есть несколько вопросов:

  1. Если флаг isAssertEnabled установлен в false , будет ли скомпилирован весь вызов Debug.assertTrue? Обратите внимание, что проверка isAssertEnabled == true выполняется только внутри функции после ее вызова.
  2. Если весь вызов компилируется, означает ли это также, что вычисляется вычисление логического выражения? Было бы напрасной тратой оценивать это выражение.

Спасибо за помощь!

10
задан ykrasik 21 January 2011 в 08:00
поделиться