tipos studio primitivos objeto ejemplos ejemplo datos constant java compiler-errors java-8 openjdk jls

studio - tipos de variables en java ejemplos



¿`1/0` es una expresión constante en Java? (2)

El compilador realiza plegado constante (precomputación de expresiones literales triviales). Este es un caso donde la expresión "termina abruptamente", para usar la verborrea JLS, descalificándola de cumplir con la definición de "expresión constante". Entonces no es un error, es consistente con el JLS.

Y sí, la expresión no evalúa a un valor tampoco (advirtiendo al usuario que intenta hacer algo como esto que el resultado no será una expresión constante), pero el compilador no lo sabe hasta que lo intente. No evaluar a un valor y completar abruptamente parece ir de la mano.

Agregar una declaración de variable como

int x = 1 / 0;

no causa un error de compilación, es el interruptor que fuerza a la expresión a evaluarse en tiempo de compilación.

Por cierto, verifiqué que esto sucede también para la versión 7 de Oracle e IBM JDK, no es específico de OpenJDK o JDK8.

Esta pregunta ya tiene una respuesta aquí:

Por lo que entiendo de Java 8 JLS la expresión (1/0) se considera una expresión constante, pero cuando intento compilar el siguiente programa con OpenJDK 8 aparece un error

public class Switch { public static void main(String[] args) { switch(42) { case (1/0): return; default: return; } } }

El error dice (1/0) no es una expresión constante

Switch.java:4: error: constant expression required case (1/0): ^ 1 error

¿Me estoy perdiendo de algo? ¿O es un error en OpenJDK 8?


Una expresión constante debe poder evaluar a un valor, ya que el compilador debe reconducir esa expresión a un valor.

1/0 no tiene ningún valor.

De JSL §15.28:

Una expresión constante de tiempo de compilación es una expresión que denota un valor de tipo primitivo o una cadena que no se completa abruptamente y se compone solo con lo siguiente: