Java: eliminação de código morto

Gostaria de saber como o Java lidaria com o seguinte cenário:

Suponha que eu tenha uma classe chamada Debug, que se parece com isso:

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);
            }
        }
    }
}

e suponha que meu código tenha uma chamada parecida com esta:

...
Debug.assertTrue((x + y != z) && (v - u > w), "Some error message");
....

Eu tenho algumas perguntas:

Se oisAssertEnabled sinalizador está definido comofalso, toda a chamada para Debug.assertTrue será compilada? Observe que a verificação se isAssertEnabled == true é feita apenas dentro da função após ser chamada.Se toda a chamada for compilada, isso também significa que a avaliação da expressão booleana é compilada? Seria um desperdício avaliar essa expressão por nada.

Obrigado pela ajuda!

questionAnswers(3)

yourAnswerToTheQuestion