Un compilador de Java debe detectar código, obviamente, inalcanzable, que es un requisito de la lengua. Por lo que el siguiente código compila sin errores:
static final boolean flag = true;
public static void main(String[] args) {
final String msg;
if (flag)
msg = "true";
if (!flag)
msg = "false";
System.out.println(msg);
}
Nota que el GMS es final, pero el compilador no se quejan de que el GMS no se ha iniciado ni se quejan de que se ha inicializado dos veces. La mayoría de los compiladores no escribirán el código muerto en el archivo de clase. Pero incluso si, el JIT lo optimizará.
C++ también tiene una noción de constantes de tiempo de compilación. A const int es una constante de tiempo de compilación, por lo que se puede usar como un argumento de plantilla sin tipo, por ejemplo. Así que cada compilador de C++ sane detectará y optimizará el código obviamente obsoleto de este tipo, incluso si compila sin especificar las opciones de optimización.
¿Por qué no lo intentas y ves el binario resultante? –
Específicamente, puede usar el comando javap -c en su clase para imprimir el bytecode, que en realidad es bastante fácil de leer. http://download.oracle.com/javase/1,5.0/docs/tooldocs/windows/javap.html – Brigham
Recuerdo haber visto 'if (false) {...}' como una forma recomendada de excluir código en Java, à la '# if' en el preprocesador C. Eso fue hace varios años. – Joe