Я хотел бы знать, как 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 выполняется только внутри функции после ее вызова.
- Если весь вызов компилируется, значит ли это, что вычисляется логическое выражение?Было бы пустой тратой оценить это выражение даром.
Спасибо за помощь!