Последовательность точек в Java
Существует ли гарантированная последовательность выполнения следующего кода Java:
int i = getA() + getB();
Является getA()
всегда выполняется раньше getB()
как мог ожидать любой средний человек?
1 ответ
Да, это. Из JLS, раздел 15.7:
Язык программирования Java гарантирует, что операнды операторов, по-видимому, будут оцениваться в определенном порядке вычисления, а именно слева направо.
Рекомендуется, чтобы код не зависел от этой спецификации. Код обычно более понятен, когда каждое выражение содержит не более одного побочного эффекта в качестве самой внешней операции, и когда код не зависит от того, какое именно исключение возникает в результате вычисления выражений слева направо.
...
Похоже, что левый операнд бинарного оператора полностью вычисляется перед тем, как вычисляется любая часть правого операнда.
а также:
Язык программирования Java также гарантирует, что каждый операнд оператора (за исключением условных операторов &&, || и?:), по-видимому, будет полностью оценен перед выполнением любой части самой операции.