Приоритет операторов

Приоритет операторов определяет порядок, в котором операторы выполняются. Операторы с более высоким приоритетом выполняются первыми.

Распространённый пример:

3 + 4 * 5 // возвращает 23	 

Оператор умножения («*») имеет более высокий приоритет, чем оператор сложения («+») и поэтому будет выполняться первым.

Ассоциативность

Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:

a OP b OP c

Левая ассоциативность (слева-направо) означает, что оно обрабатывается как (a OP b) OP c, в то время как правая ассоциативность (справа-налево) означает, что они интерпретируются как a OP (b OP c). Операторы присваивания являются право-ассоциативными, так что Вы можете написать:

a = b = 5;

с ожидаемым результатом, что a и b будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала b становится равным 5, затем a принимает значение b.

Таблица

Данная таблица упорядочена с самого высокого приоритета (19) до самого низкого (0).

Приоритет Тип оператора Ассоциативность Конкретные операторы
19 Группирование неопределено ( … )
18 Доступ к элементам слева направо … . …
Доступ к элементам с возможностью вычисления слева направо … [ … ]
new (со списком аргументов) неопределено new … ( … )
17 Вызов функции слева направо … ( … )
new (без списка аргументов) справа налево new …
16 Постфиксный инкремент неопределено … ++
Постфиксный декремент неопределено … --
15 Логическое отрицание справа налево ! …
Побитовое отрицание справа налево ~ …
Унарный плюс справа налево + …
Унарный минус справа налево - …
Префиксный инкремент справа налево ++ …
Префиксный декремент справа налево -- …
typeof справа налево typeof …
void справа налево void …
delete справа налево delete …
14 Умножение слева направо … * …
Деление слева направо … / …
Остаток слева направо … % …
13 Сложение слева направо … + …
Вычитание слева направо … - …
12 Побитовый сдвиг влево слева направо … << …
Побитовый сдвиг вправо слева направо … >> …
Сдвиг вправо с заполнением нулей слева направо … >>> …
11 Меньше слева направо … < …
Меньше либо равно слева направо … <= …
Больше слева направо … > …
Больше либо равно слева направо … >= …
in слева направо … in …
instanceof слева направо … instanceof …
10 Равно слева направо … == …
Не равно слева направо … != …
Строго равно слева направо … === …
Строго не равно слева направо … !== …
9 Побитовое «И» слева направо … & …
8 Побитовое иключающее «ИЛИ» слева направо … ^ …
7 Побитовое «ИЛИ» слева направо … | …
6 Логическое «И» слева направо … && …
5 Логическое «ИЛИ» слева направо … || …
4 Условный справа налево … ? … : …
3 Присваивание справа налево … = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield справа налево yield …
1 Оператор расширения неопределено ... …
0 Запятая / Последовательность слева направо … , …

Метки документа и участники

 Внесли вклад в эту страницу: bychek.ru, Aleksej, fscholz, mcmimik, teoli, TotalAMD, hazestalker
 Обновлялась последний раз: bychek.ru,