Java operatora prioritāte

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āte
Operatori 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ācija
Operatori 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.

Interesanti raksti...