Приоритет операторов определяет порядок, в котором оцениваются операторы в выражении.
Прежде чем вы начнете читать эту статью, вы должны иметь базовые знания об операторах Java.
Теперь взгляните на утверждение ниже:
int myInt = 12 - 4 * 2;
В чем будет ценность myInt? Будет (12 - 4)*2, то есть 16? Или будет 12 - (4 * 2), то есть 4?
Когда два оператора используют общий операнд, 4в этом случае первым работает оператор с наивысшим приоритетом.
В Java приоритет *выше, чем у -. Следовательно, умножение выполняется перед вычитанием, и значение myInt будет равно 4.
Таблица приоритета операторов
В таблице ниже перечислены приоритеты операторов в Java; чем выше он отображается в таблице, тем выше его приоритет.
Приоритет оператора Java| Операторы | Приоритет |
|---|---|
| постфиксное приращение и декремент | ++ -- |
| приращение и уменьшение префикса, а также унарный | ++ -- + - ~ ! |
| мультипликативный | * / % |
| добавка | + - |
| сдвиг | << >> >>> |
| реляционный | < > <= >= instanceof |
| равенство | == != |
| побитовое И | & |
| побитовое исключающее ИЛИ | ^ |
| побитовое ИЛИ | | |
| логическое И | && |
| логическое ИЛИ | || |
| тройной | ? : |
| назначение | = += -= *= /= %=&= ^= |= <<= >>= >>>= |
Пример: приоритет оператора
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Выход :
2
Приоритет оператора префикса ++выше, чем у -оператора вычитания. Следовательно,
результат = a - ++ c - ++ b;
эквивалентно
результат = a - (++ c) - (++ b);
При работе с несколькими операторами и операндами в одном выражении вы можете использовать круглые скобки, как в приведенном выше примере, для ясности. Сначала вычисляется выражение в круглых скобках.
Ассоциативность операторов в Java
Если в выражении есть два оператора с одинаковым приоритетом, выражение оценивается в соответствии с его ассоциативностью (слева направо или справа налево). Возьмем пример.
а = б = с;
Здесь значение c присваивается переменной b. Затем переменной a присваивается значение b. Зачем? Это потому, что ассоциативность оператора = находится справа налево.
В таблице ниже показана ассоциативность операторов Java вместе с их ассоциативностью.
Приоритет и ассоциативность операторов Java| Операторы | Приоритет | Ассоциативность |
|---|---|---|
| постфиксное приращение и декремент | ++ -- | слева направо |
| приращение и уменьшение префикса, а также унарный | ++ -- + - ~ ! | справа налево |
| мультипликативный | * / % | слева направо |
| добавка | + - | слева направо |
| сдвиг | << >> >>> | слева направо |
| реляционный | < > <= >= instanceof | слева направо |
| равенство | == != | слева направо |
| побитовое И | & | слева направо |
| побитовое исключающее ИЛИ | ^ | слева направо |
| побитовое ИЛИ | | | слева направо |
| логическое И | && | слева направо |
| логическое ИЛИ | || | слева направо |
| тройной | ? : | справа налево |
| назначение | = += -= *= /= %=&= ^= |= <<= >>= >>>= | справа налево |
Здесь не нужно все запоминать. В большинстве случаев приоритет и ассоциативность операторов имеют смысл сами по себе. Вы всегда можете вернуться к этой статье для справки, если сомневаетесь. Кроме того, вы можете использовать круглые скобки, если считаете, что они упрощают понимание кода.








