Priorita operátorů určuje pořadí, ve kterém jsou operátory ve výrazu vyhodnoceny.
Než začnete číst tento článek, měli byste mít základní znalosti o operátorech Java.
Nyní se podívejte na prohlášení níže:
int myInt = 12 - 4 * 2;
Jaká bude hodnota myInt? Bude (12 - 4)*2
, to znamená 16
? Nebo to bude 12 - (4 * 2)
, to znamená, že 4
?
Když dva operátoři sdílejí společný operand, 4
v tomto případě je nejprve operován operátor s nejvyšší prioritou.
V Javě je priorita *
vyšší než -
. Násobení se tedy provádí před odečtením a hodnota myInt bude 4.
Tabulka priorit operátora
Níže uvedená tabulka uvádí prioritu operátorů v Javě; čím vyšší je v tabulce, tím vyšší je jeho priorita.
Přednost operátora JavaOperátoři | Přednost |
---|---|
přírůstek a úbytek postfixu | ++ -- |
přírůstek a úbytek předpony a unární | ++ -- + - ~ ! |
multiplikativní | * / % |
přísada | + - |
posun | << >> >>> |
relační | < > <= >= instanceof |
rovnost | == != |
bitové AND | & |
bitový exkluzivní OR | ^ |
bitové včetně NEBO | | |
logické AND | && |
logické NEBO | || |
trojice | ? : |
úkol | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Příklad: Přednost operátora
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Výstup :
2
Přednost operátoru předpony ++
je vyšší než priorita -
operátoru odečítání. Proto,
result = a - ++ c - ++ b;
je ekvivalentní k
result = a - (++ c) - (++ b);
Při práci s více operátory a operandy v jediném výrazu můžete pro přehlednost použít závorky jako ve výše uvedeném příkladu. Nejprve se vyhodnotí výraz uvnitř závorek.
Asociativita operátorů v Javě
Pokud má výraz dva operátory s podobnou prioritou, je výraz vyhodnocen podle jeho asociativity (zleva doprava nebo zprava doleva). Vezměme si příklad.
a = b = c;
Zde je hodnota c přiřazena proměnné b. Pak je hodnotě b přiřazena proměnná a. Proč? Je to proto, že asociativita operátoru = je zprava doleva.
Tabulka níže ukazuje asociativitu operátorů Java spolu s jejich asociativitou.
Přednost operátora Java a asociativitaOperátoři | Přednost | Asociativita |
---|---|---|
přírůstek a úbytek postfixu | ++ -- | zleva do prava |
přírůstek a úbytek předpony a unární | ++ -- + - ~ ! | zprava doleva |
multiplikativní | * / % | zleva do prava |
přísada | + - | zleva do prava |
posun | << >> >>> | zleva do prava |
relační | < > <= >= instanceof | zleva do prava |
rovnost | == != | zleva do prava |
bitové AND | & | zleva do prava |
bitový exkluzivní OR | ^ | zleva do prava |
bitové včetně NEBO | | | zleva do prava |
logické AND | && | zleva do prava |
logické NEBO | || | zleva do prava |
trojice | ? : | zprava doleva |
úkol | = += -= *= /= %= &= ^= |= <<= >>= >>>= | zprava doleva |
Zde si nemusíte pamatovat vše. Většinu času má přednost a asociativita operátorů sama o sobě smysl. V případě pochybností se můžete k tomuto článku kdykoli vrátit. Můžete také použít závorky, pokud si myslíte, že to usnadňuje pochopení vašeho kódu.