Приоритет операторов определяет порядок, в котором оцениваются операторы в выражении.
Прежде чем вы начнете читать эту статью, вы должны иметь базовые знания об операторах 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 | слева направо |
равенство | == != | слева направо |
побитовое И | & | слева направо |
побитовое исключающее ИЛИ | ^ | слева направо |
побитовое ИЛИ | | | слева направо |
логическое И | && | слева направо |
логическое ИЛИ | || | слева направо |
тройной | ? : | справа налево |
назначение | = += -= *= /= %= &= ^= |= <<= >>= >>>= | справа налево |
Здесь не нужно все запоминать. В большинстве случаев приоритет и ассоциативность операторов имеют смысл сами по себе. Вы всегда можете вернуться к этой статье для справки, если сомневаетесь. Кроме того, вы можете использовать круглые скобки, если считаете, что они упрощают понимание кода.