Последовательность точек в Java

Существует ли гарантированная последовательность выполнения следующего кода Java:

int i = getA() + getB();

Является getA() всегда выполняется раньше getB()как мог ожидать любой средний человек?

1 ответ

Решение

Да, это. Из JLS, раздел 15.7:

Язык программирования Java гарантирует, что операнды операторов, по-видимому, будут оцениваться в определенном порядке вычисления, а именно слева направо.

Рекомендуется, чтобы код не зависел от этой спецификации. Код обычно более понятен, когда каждое выражение содержит не более одного побочного эффекта в качестве самой внешней операции, и когда код не зависит от того, какое именно исключение возникает в результате вычисления выражений слева направо.

...

Похоже, что левый операнд бинарного оператора полностью вычисляется перед тем, как вычисляется любая часть правого операнда.

а также:

Язык программирования Java также гарантирует, что каждый операнд оператора (за исключением условных операторов &&, || и?:), по-видимому, будет полностью оценен перед выполнением любой части самой операции.

Другие вопросы по тегам