Simple cuestión teórica
Publicado por Daniel (1 intervención) el 04/10/2014 19:12:07
Hola a todos, tengo una pequeña duda en Java, es más una cuestión teórica que práctica:
Según he podido leer en varios libros de Java el operador lógico (AND) && tiene una valor de precedencia más alto que (OR) ||.
Sin embargo me encuentro este sencillo ejercicio, donde parece ser que el orden de precedencia no se cumple:
int a = 2;
int b = 4;
if(a < 3 || b <10 && b< 4/0)
{
System.out.println("Estoy dentro");
}
El programa compila y muestra el mensaje correctamente, puesto que se basa en el hecho de la evaluación en cortocircuito. Y como a<3 es cierto cualquier cosa después del || (OR) también lo será.
Sin embargo, espera que diese un error en tiempo de ejecuación, pues si realmente (AND) && tiene mayor procedencia que (OR) || se tendrÃa que evaluar primero b<10 && b<4/0 y puesto que se está cometiendo un error lógico al dividir entre cero deverÃa dar un error. Pero como he comentado anteriormente aplica el criterio de evaluación en cortocircuito, ergo no entiendo porque evalúa primero (a<3) || ... y no (b<10) && si el operador AND tiene más procedencia.
¿Cuál es la explicación al respecto?
Gracias a todos y un Saludo.
Según he podido leer en varios libros de Java el operador lógico (AND) && tiene una valor de precedencia más alto que (OR) ||.
Sin embargo me encuentro este sencillo ejercicio, donde parece ser que el orden de precedencia no se cumple:
int a = 2;
int b = 4;
if(a < 3 || b <10 && b< 4/0)
{
System.out.println("Estoy dentro");
}
El programa compila y muestra el mensaje correctamente, puesto que se basa en el hecho de la evaluación en cortocircuito. Y como a<3 es cierto cualquier cosa después del || (OR) también lo será.
Sin embargo, espera que diese un error en tiempo de ejecuación, pues si realmente (AND) && tiene mayor procedencia que (OR) || se tendrÃa que evaluar primero b<10 && b<4/0 y puesto que se está cometiendo un error lógico al dividir entre cero deverÃa dar un error. Pero como he comentado anteriormente aplica el criterio de evaluación en cortocircuito, ergo no entiendo porque evalúa primero (a<3) || ... y no (b<10) && si el operador AND tiene más procedencia.
¿Cuál es la explicación al respecto?
Gracias a todos y un Saludo.

Valora esta pregunta


0