последовательность точек в Java - PullRequest
5 голосов
/ 04 декабря 2010

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

int i = getA() + getB();

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

1 Ответ

13 голосов
/ 04 декабря 2010

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

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

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

...

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

, а также:

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

...