Cuando hablamos de precedencia en Java, lo primero que pensamos es el operador. Existen ciertas reglas definidas en Java para especificar el orden en el que se evalúan los operadores en una expresión. Prioridad del operador es un concepto para determinar el grupo de términos en una expresión. La precedencia de operadores es responsable de evaluar las expresiones. En Java , paréntesis() y Subíndice de matriz [] tienen la mayor precedencia en Java. Por ejemplo, la suma y la resta tienen mayor prioridad que los operadores de desplazamiento a la izquierda y desplazamiento a la derecha.
A continuación se muestra una tabla definida en la que el operador de menor precedencia se muestra en la parte superior.
Precedencia | Operador | Tipo | asociatividad |
---|---|---|---|
1) | = += -= *= /= %= | Asignación tarea adicional tarea de resta Asignación de multiplicación Asignación de división Asignación de módulo | De derecha a izquierda |
2) | ? : | Condicional ternario | De derecha a izquierda |
3) | || | O lógico | De izquierda a derecha |
4) | && | Y lógico | De izquierda a derecha |
5) | | | O inclusivo bit a bit | De izquierda a derecha |
6) | ^ | O exclusivo bit a bit | De izquierda a derecha |
7) | & | Bit a bit Y | De izquierda a derecha |
8) | != == | Relacional no es igual a Relacional es igual a | De izquierda a derecha |
9) | < <= > >= en vez de=> | Relacional menor que Relacional menor o igual Relacional mayor que Relacional mayor o igual Comparación de tipos (solo objetos) | De izquierda a derecha |
10) | >> << >>> | Desplazamiento bit a derecha con extensión de signo Desplazamiento bit a izquierda Desplazamiento bit a derecha con extensión cero | De izquierda a derecha |
11) | - + | Sustracción Suma | De izquierda a derecha |
12) | * / % | Multiplicación División Módulo | De izquierda a derecha |
13) | - + ~ ! ( tipo) | menos unario más unario Complemento unario bit a bit Negación lógica unaria encasillamiento unario | De derecha a izquierda |
14) | ++ -- | Post-incremento unario Post-decremento unario | De derecha a izquierda |
15) | · () [] | operador de punto Paréntesis Subíndice de matriz | De izquierda a derecha |
Orden de precedencia
Cuando dos operadores comparten un único operando, el operador que tiene mayor precedencia va primero. Por ejemplo, x + y * z se trata como x + (y * z), mientras que x * y + z se trata como (x * y) + z porque el operador * tiene la mayor prioridad en comparación con el operador +.
"¿Cuál es la diferencia entre un león y un tigre?"
asociatividad
Asociativo es un concepto relacionado con los operadores que se aplican cuando en una expresión entran dos operadores con la misma precedencia. El concepto de asociatividad es muy útil para salir de esa situación. Supongamos que tenemos una expresión a + b - c (Los operadores + y - tienen la misma prioridad) , y esta expresión será tratada como (a + (b-c)) porque estos operadores son asociativos de derecha a izquierda. Por otro lado, a+++--b+c++ se tratará como ((a++)+((--b)+(c++))) porque los operadores unarios post-incremento y decremento son asociativos de derecha a izquierda.
A continuación se define un ejemplo para comprender cómo se evalúa una expresión utilizando el orden de precedencia y la asociatividad.
Expresión: x = 4 / 2 + 8 * 4 - ( 5+ 2 ) % 3
Solución:
1) En la expresión anterior, el operador de mayor precedencia es () . Entonces, el paréntesis va primero y se calcula primero.
x = 4 / 2 + 8 * 4 - 7 % 3
2) Ahora, /, * y % Los operadores tienen la misma precedencia y la más alta desde el + y - Aquí utilizamos el concepto de asociatividad para resolverlos. Los asociativos de estos operadores son de izquierda a derecha. Entonces, / El operador va primero y luego. * y % simultáneamente.
mil millones a millón
x = 2 + 8 * 4 - 7 % 3
x = 2 + 32 - 7 % 3
x = 2 + 32 - 1
3) Ahora, + y - Ambos operadores también tienen la misma precedencia y la asociatividad de estos operadores no se desplaza hacia la derecha. Entonces, + El operador irá primero y luego - iré.
x = 34 - 1
x = 33
listas de látex
HighestPrecedence.java
//import classes import java.util.*; //creating HighestPrecedence class to evaluate the expression public class HighestPrecedence { //main() method starts public static void main(String[] args) { //initialize variables with default values int x = 2; int y = 5; int z = 12; //calculating exp1, exp2, and exp3 int exp1 = x +(z/x+(z%y)*(z-x)^2); int exp2 = z/x+y*x-(y+x)%z; int exp3 = 4/2+8*4-(5+2)%3; //printing the result System.out.println(exp1); System.out.println(exp2); System.out.println(exp3); } }
Producción