Quan parlem de precedència a Java, l'operador és el primer en ment. Hi ha certes regles definides a Java per especificar l'ordre en què s'avaluen els operadors d'una expressió. Precedència de l'operador és un concepte per determinar el grup de termes d'una expressió. La precedència de l'operador és responsable d'avaluar les expressions. En Java , parèntesis () i Subíndex de matriu[] tenen la prioritat més alta a Java. Per exemple, la suma i la resta tenen una prioritat més alta que els operadors de desplaçament a l'esquerra i a la dreta.
A continuació es mostra una taula definida en la qual es mostra l'operador de precedència més baixa a la part superior.
Precedència | Operador | Tipus | Associativitat |
---|---|---|---|
1) | = += -= *= /= %= | Encàrrec Encàrrec addicional Tasca de resta Tasca de multiplicació Encàrrec de la divisió Assignació de mòduls | De dreta a esquerra |
2) | ? : | Condicional ternari | De dreta a esquerra |
3) | || | OR lògic | Esquerra a dreta |
4) | && | I lògic | Esquerra a dreta |
5) | | | OR inclòs per bits | Esquerra a dreta |
6) | ^ | OR exclusiu per bits | Esquerra a dreta |
7) | & | I per bits | Esquerra a dreta |
8) | != == | Relacional no és igual a Relacional és igual a | Esquerra a dreta |
9) | < <= > >= en lloc de=> | Relacional menys que Relacional menor o igual Relacional més gran que Relacional major o igual Comparació de tipus (només objectes) | Esquerra a dreta |
10) | >> << >>> | Desplaçament a la dreta per bits amb extensió de signe Desplaçament a l'esquerra per bits Desplaçament a la dreta bit a bit amb extensió zero | Esquerra a dreta |
11) | - + | Resta Addició | Esquerra a dreta |
12) | * / % | Multiplicació Divisió Mòdul | Esquerra a dreta |
13) | - + ~ ! (tipus) | Menys unari Plus unari Complement unari per bits Negació lògica unària Tipografia unària | De dreta a esquerra |
14) | ++ -- | Post-increment unari Post-decrement unari | De dreta a esquerra |
15) | · () [] | Operador de punts Parèntesis Subíndex de matriu | Esquerra a dreta |
Ordre de preferència
Quan dos operadors comparteixen un únic operand, l'operador que té la prioritat més alta passa primer. Per exemple, x + y * z es tracta com x + (y * z), mentre que x * y + z es tracta com (x * y) + z perquè l'operador * té la precedència més alta en comparació de l'operador +.
scan.nextstring java
Associativitat
L'associatiu és un concepte relacionat amb els operadors aplicats quan dos operadors amb la mateixa precedència entren en una expressió. El concepte d'associativitat és molt útil per sortir d'aquesta situació. Suposem que tenim una expressió a + b - c (els operadors + i - tenen la mateixa prioritat) , i aquesta expressió es tractarà com (a + (b - c)) perquè aquests operadors són associatius de dreta a esquerra. D'altra banda, a+++--b+c++ es tractarà com ((a++)+((--b)+(c++))) perquè els operadors unaris de post-increment i decrement són associatius de dreta a esquerra.
A continuació es defineix un exemple per entendre com s'avalua una expressió utilitzant l'ordre de precedència i l'associativitat?
Expressió: x = 4 / 2 + 8 * 4 - ( 5+ 2 ) % 3
Solució:
1) A l'expressió anterior, l'operador de prioritat més alta és () . Per tant, el parèntesi va primer i es calcula primer.
x = 4 / 2 + 8 * 4 - 7 % 3
2) Ara, /, * i % els operadors tenen la mateixa precedència i més alt que el + i - Aquí, fem servir el concepte d'associativitat per resoldre'ls. Els associats d'aquests operadors són d'esquerra a dreta. Tan, / l'operador va primer i després * i % simultàniament.
x = 2 + 8 * 4 - 7 % 3
x = 2 + 32 - 7 % 3
desviació estàndard dels pandas
x = 2 + 32 - 1
3) Ara, + i - els dos operadors també tenen la mateixa prioritat, i l'associativitat d'aquests operadors no sigui cap a la dreta. Tan, + l'operador anirà primer i després - anirem.
x = 34 - 1
x = 33
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); } }
Sortida
cadena adjunta java