Pierwszeństwo operatorów określa kolejność, w jakiej operatory w wyrażeniu są oceniane.
Zanim zaczniesz czytać ten artykuł, powinieneś mieć podstawową wiedzę na temat operatorów Java.
Teraz spójrz na poniższe stwierdzenie:
int myInt = 12 - 4 * 2;
Jaka będzie wartość myInt? Będzie to (12 - 4)*2
, że jest 16
? Czy będzie 12 - (4 * 2)
, to znaczy 4
?
Gdy dwa operatory mają wspólny operand, 4
w tym przypadku operator o najwyższym priorytecie jest obsługiwany jako pierwszy.
W Javie pierwszeństwo *
jest większe niż -
. Stąd mnożenie jest wykonywane przed odejmowaniem, a wartość myInt będzie wynosić 4.
Tabela pierwszeństwa operatorów
Poniższa tabela przedstawia pierwszeństwo operatorów w Javie; wyżej pojawia się w tabeli, tym wyższy jest jego priorytet.
Pierwszeństwo operatorów JavaOperatorzy | Precedens |
---|---|
przyrostek przyrostka i dekrementacja | ++ -- |
zwiększanie i zmniejszanie przedrostka oraz jednoargumentowe | ++ -- + - ~ ! |
mnożny | * / % |
przyłączeniowy | + - |
Zmiana | << >> >>> |
relacyjny | < > <= >= instanceof |
równość | == != |
bitowe AND | & |
bitowe wyłączne OR | ^ |
bitowe OR | | |
logiczne AND | && |
logiczne OR | || |
potrójny | ? : |
zadanie | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Przykład: pierwszeństwo operatora
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Wyjście :
2
Pierwszeństwo operatora przedrostka ++
jest większe niż w przypadku -
operatora odejmowania. W związku z tym,
wynik = a - ++ c - ++ b;
jest równa
wynik = a - (++ c) - (++ b);
Kiedy mamy do czynienia z wieloma operatorami i operandami w jednym wyrażeniu, dla większej przejrzystości można użyć nawiasów, jak w powyższym przykładzie. Wyrażenie w nawiasach jest oceniane jako pierwsze.
Asocjatywność operatorów w Javie
Jeśli wyrażenie ma dwa operatory o podobnym pierwszeństwie, wyrażenie jest oceniane zgodnie z jego asocjatywnością (od lewej do prawej lub od prawej do lewej). Weźmy przykład.
a = b = c;
Tutaj wartość c jest przypisana do zmiennej b. Następnie wartość b jest przypisywana zmiennej a. Czemu? Dzieje się tak, ponieważ asocjatywność operatora = przebiega od prawej do lewej.
Poniższa tabela przedstawia asocjatywność operatorów Java wraz z ich łącznością.
Pierwszeństwo i łączność operatorów JavaOperatorzy | Precedens | Łączność |
---|---|---|
przyrostek przyrostka i dekrementacja | ++ -- | z lewej na prawą |
zwiększanie i zmniejszanie przedrostka oraz jednoargumentowe | ++ -- + - ~ ! | od prawej do lewej |
mnożny | * / % | z lewej na prawą |
przyłączeniowy | + - | z lewej na prawą |
Zmiana | << >> >>> | z lewej na prawą |
relacyjny | < > <= >= instanceof | z lewej na prawą |
równość | == != | z lewej na prawą |
bitowe AND | & | z lewej na prawą |
bitowe wyłączne OR | ^ | z lewej na prawą |
bitowe OR | | | z lewej na prawą |
logiczne AND | && | z lewej na prawą |
logiczne OR | || | z lewej na prawą |
potrójny | ? : | od prawej do lewej |
zadanie | = += -= *= /= %= &= ^= |= <<= >>= >>>= | od prawej do lewej |
Nie musisz tutaj wszystkiego zapamiętywać. W większości przypadków pierwszeństwo i łączność operatorów ma sens sam w sobie. W razie wątpliwości zawsze możesz wrócić do tego artykułu w celach informacyjnych. Możesz także użyć nawiasów, jeśli uważasz, że ułatwi to zrozumienie kodu.