Operatora prioritāte nosaka secību, kādā tiek vērtēti izteiksmes operatori.
Pirms sākat lasīt šo rakstu, jums vajadzētu būt pamatzināšanām par Java operatoriem.
Tagad ieskatieties zemāk esošajā paziņojumā:
int myInt = 12 - 4 * 2;
Kāda būs myInt vērtība? Vai tas būs (12 - 4)*2
, tas ir 16
,? Vai arī tas būs 12 - (4 * 2)
, tas ir 4
,?
Ja diviem operatoriem ir kopīgs operands, 4
šajā gadījumā vispirms tiek darbināts operators ar visaugstāko prioritāti.
Java valodā prioritāte *
ir augstāka nekā -
. Tādējādi reizināšana tiek veikta pirms atņemšanas, un myInt vērtība būs 4.
Operatora prioritātes tabula
Zemāk esošajā tabulā ir uzskaitīti Java operatoru prioritāte; augstāk tas parādās tabulā, jo augstāka ir tā prioritāte.
Java operatora prioritāteOperatori | Priekšroka |
---|---|
pēcfiksa pieaugums un samazinājums | ++ -- |
prefiksa pieaugums un samazinājums, unāri | ++ -- + - ~ ! |
reizinošs | * / % |
piedeva | + - |
maiņa | << >> >>> |
relāciju | < > <= >= instanceof |
vienlīdzība | == != |
biti pa AND | & |
bitu ekskluzīvs VAI | ^ |
bitu iekļaušana VAI | | |
loģiski UN | && |
loģiski VAI | || |
trīskāršais | ? : |
uzdevums | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Piemērs: Operatora prioritāte
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Izeja :
2
Operatora prefikss ++
ir augstāks nekā -
atņemšanas operatoram. Tādējādi
rezultāts = a - ++ c - ++ b;
ir ekvivalents
rezultāts = a - (++ c) - (++ b);
Strādājot ar vairākiem operatoriem un operandiem vienā izteiksmē, skaidrības labad varat izmantot iekavas, piemēram, iepriekšminētajā piemērā. Vispirms tiek novērtēta izteiksme iekavās.
Operatoru asociācija Java
Ja izteiksmei ir divi operatori ar līdzīgu prioritāti, izteiksme tiek vērtēta pēc tās asociativitātes (vai nu no kreisās uz labo, vai no labās uz kreiso). Ņemsim piemēru.
a = b = c;
Šeit c vērtība tiek piešķirta mainīgajam b. Tad b lielumam piešķir mainīgo a. Kāpēc? Tas ir tāpēc, ka = operatora asociativitāte ir no labās uz kreiso.
Zemāk esošajā tabulā ir parādīta Java operatoru asociativitāte kopā ar viņu asociativitāti.
Java operatora prioritāte un asociācijaOperatori | Priekšroka | Asociativitāte |
---|---|---|
pēcfiksa pieaugums un samazinājums | ++ -- | no kreisās uz labo |
prefiksa pieaugums un samazinājums, unāri | ++ -- + - ~ ! | no labās uz kreiso |
reizinošs | * / % | no kreisās uz labo |
piedeva | + - | no kreisās uz labo |
maiņa | << >> >>> | no kreisās uz labo |
relāciju | < > <= >= instanceof | no kreisās uz labo |
vienlīdzība | == != | no kreisās uz labo |
biti pa AND | & | no kreisās uz labo |
bitu ekskluzīvs VAI | ^ | no kreisās uz labo |
bitu iekļaušana VAI | | | no kreisās uz labo |
loģiski UN | && | no kreisās uz labo |
loģiski VAI | || | no kreisās uz labo |
trīskāršais | ? : | no labās uz kreiso |
uzdevums | = += -= *= /= %= &= ^= |= <<= >>= >>>= | no labās uz kreiso |
Šeit viss nav jāiegaumē. Lielāko daļu laika operatoru prioritātei un asociativitātei ir jēga pati par sevi. Šaubu gadījumā vienmēr varat atgriezties pie šī raksta. Varat arī izmantot iekavas, ja domājat, ka tas padara jūsu kodu vieglāk saprotamu.