Programación en Java/Precedencia de operadores
Ya que conocimos a los operadores, vamos a tratar de colocarlos todos juntos en una sola expresión. Vamos a ver como se organizan para trabajar:
int j = 10; boolean esCierto = j/j*j>j-j+j&&j<<j>>>j==j%j||++j<--j+j--;
Civilizadamente se organizan de acuerdo al nivel del precedencia de cada uno. Primeramente proceden los unarios, luego los aritméticos, después los de bits, posteriormente los relacionales, detrás vienen los booleanos y por último el operador de asignación. La regla de precedencia establece que los operadores de mayor nivel se ejecuten primero.
Descripción | Operadores |
---|---|
operadores posfijos | op++ op-- |
operadores unarios | ++op --op +op -op ~ ! |
multiplicación y división | * / % |
suma y resta | + - |
desplazamiento | << >> >>> |
operadores relacionales | < > <= => |
equivalencia | == != |
operador AND | & |
operador XOR | ^ |
operador OR | | |
AND booleano | && |
OR booleano | || |
condicional | ?: |
operadores de asignación | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
En la tabla se muestra el nivel de precedencia de los operadores. Los de mayor nivel se encuentran arriba. Podemos ver que los últimos son los de asignación. Esto es lógico, ya que se debe calcular primeramente la expresión antes de asignar un resultado a una variable.
Veamos unos ejemplos de cómo actúa esta regla.
int j = 1 + 3 * 4; // resultado j = 13
Desde que aprendimos aritmética básica, conocemos la regla que nos obliga a calcular la multiplicación antes de una suma. Esto también se cumple en Java.
int j = 1 + 3 – 4; resultado j= 0;
Si todos los operadores tienen un nivel idéntico de precedencia se evalua la expresión de izquierda a derecha.
Utilización de paréntesis
[editar]Se utilizan para aislar una porción de la expresión de forma que el cálculo se ejecute de forma independiente. Puede forzar a una expresión a ignorar las reglas de precedencia.
int j = 1 + 3 * 4; // resultado j = 13 int h = (1 + 3) * 4 // resultado h = 16
Tomando el primer ejemplo, forzamos al compilador a realizar la suma antes que la multiplicación.
En este ejemplo es imprescindible la utilización de paréntesis :
int k = 1 + (h = 3);
Si quitamos los paréntesis el compilador protestará. Porque al establecer un nivel muy bajo para la asignación, procede primero la suma. Pero estamos sumando con una variable sin valor.
Como en matemáticas, podemos anidar los paréntesis. Se comenzara a evaluar los internos hasta llegar a los externos.
Cabe agregar que los paréntesis no disminuyen el rendimiento de los programas. Por lo tanto, agregar paréntesis no afecta negativamente al programa.
int k = ((12 - 2) * ( 21 - 11)) / ((1+1)*(15-10)) + 1 ;