Приоритет операций Java

Автор: | 2017-10-02

    Во время выполнения операций можно задавать приоритет выполнения с помощью скобок (операции в скобках выполняются раньше). Если скобки отсутствуют, выполняются сначала более приоритетные операции. Ниже приведена таблица приоритета выполнения операций.

Оператор Описание Ассоциативность
++, —  постинкремент, постдекремент  справа налево
++, —, +, -, ~, !  преинкремент, предекремент, унарный плюс, унарный минус, поразрядное дополнение, булево «не»  справа налево
*, /, %  умножение, деление, остаток от деления  слева направо
+, —  сложение, вычитание  слева направо
<<, >>, >>>  сдвиг влево, сдвиг вправо, беззнаковый сдвиг вправо  слева направо
<, >, <=, >=, instanceof  меньше, больше, меньше или равно, больше или равно, сравнить тип  слева направо
==, !=  равно, не равно  слева направо
&  битовое «и»  слева направо
^  исключающее «или»  слева направо
|  битовое «или»  слева направо
&&  логическое «и»  слева направо
||  логическое «или»  слева направо
 ?:  тернарный оператор  слева направо
 =, +=, -=,*=, /=, %=, &=, ^=,  |=, <<=, >>=, >>>=  операторы присваивания  справа налево

    Чем выше в таблице расположен оператор, тем больше у него приоритет. В выражении ++x+y*z сперва выполнится инкремент, затем умножение, затем сложение (выражение можно представить в виде (++x)+(y*z) ).

    Операции, которые расположены на одном уровне в таблице, выполняются согласно ассоциативности выполнения (слева направо или справа налево). То есть, при ассоциативности слева направо сперва выполняются операции, «написанные» в выражении левее. Например, в выражении 7%3*2 сначала выполняется получение остатка от деления, затем — умножение (иначе ответ был бы равен единице).