Иллюстрированный самоучитель по Java
Выражения
Из констант и переменных, операций
над ними, вызовов методов и скобок составляются
выражения
(expressions).
Разумеется, все элементы выражения должны быть совместимы, нельзя написать,
например, 2 + true. При вычислении выражения выполняются четыре правила:
1. Операции одного приоритета вычисляются
слева направо: х + у + z вычисляется как (х + у) + z. Исключение: операции присваивания
вычисляются справа налево: х = у = z вычисляется как х = (у = z).
2. Левый операнд вычисляется раньше
правого.
3. Операнды полностью вычисляются
перед выполнением операции.
4. Перед выполнением составной операции
присваивания значение левой части сохраняется для использования в правой части.
Следующие примеры показывает особенности
применения первых трех правил. Пусть
int а = 3, b = 5;
Тогда результатом выражения ь +
(Ь = 3) будет число 8; но результатом выражения (Ь = 3) + ь будет число 6. Выражение
ь += (Ь = 3) даст в результате 8, потому что вычисляется как первое из приведенных
выше выражений.
Знатокам C/C++
Большинство компиляторов языка
C++ во всех этих случаях вычислят значение 8.
Четвертое правило можно продемонстрировать
так. При тех же определениях а и ь в результате вычисления выражения ь += а
+= ь += 7 получим 20. Хотя операции присваивания выполняются справа налево и
после первой, правой, операции значение ь становится равным 12, но в последнем,
левом, присваивании участвует старое значение ь, равное 5. А в результате двух
последовательных вычислений а += b += 7; b += а; получим 27, поскольку во втором
выражении участвует уже новое значение переменной ь, равное 12.
Знатокам C/C++
Большинство компиляторов C++ в
обоих случаях вычислят 27.
Выражения могут иметь сложный и
запутанный вид. В таких случаях возникает вопрос о приоритете операций, о том,
какие операции будут выполнены в первую очередь. Естественно, умножение и деление
производится раньше сложения и вычитания. Остальные правила перечислены в следующем
разделе.
Порядок вычисления выражения всегда
можно отрегулировать скобками, их можно Ътавить сколько угодно. Но здесь важно
соблюдать "золотую середину". При большом количестве скобок снижается
наглядность выражения и легко ошибиться в расстановке скобок. Если выражение
со скобками корректно, то компилятор может отследить только парность скобок,
но не правильность их расстановки.