Высказывания и предикаты
Приоритеты и ассоциативность операторов языка Java
При вычислении значения выражения в языке Java важны не только приоритеты, но и ассоциативность операторов.
Определение 3.20. Оператор @ является левоассоциативным, если выражение a @ b @ c вычисляется, как (a @ b) @ c ; правоассоциативным, если оно эквивалентно a @ (b @ c) ; неассоциативным — если запись a @ b @ c не имеет смысла.
В этом определении символ @ означает любой из бинарных операторов языка.
Использование круглых скобок для группировки всегда позволяет изменить порядок вычислений, так как выражения в скобках вычисляются в первую очередь. Иногда даже формально лишние скобки в выражении полезны — они облегчают правильное восприятие.
В таблице 3.5 все операторы языка Java разбиты на группы с одинаковым приоритетом (операторы с приоритетом 1 выполняются в первую очередь), левоассоциативность обозначена символом , а правоассоциативность — символом .
С логическими и условными операторами мы уже знакомы, семантика арифметических операторов объясняется в следующем параграфе, а с оператором instanceof мы разберемся в третьей главе книги.
Задачи для самостоятельного решения
Задача 3.6.Докажите, что выражение является предикатом.
Задача 3.7.Докажите, что выражение — не предикат.
Задача 3.8.Изобразите деревья вывода для каждого из законов эквивалентности.
Задача 3.9.Покажите, что все законы эквивалентности являются тавтологиями.
Задача 3.9.Решите задачу о банке с кофейными зернами (см. задачу 3.1)