2015-10-06 2 views
0

Давайте рассмотрим следующий код:Влияние порядка операций на оператора инкремента

int[] data = {1, 2, 3}; 
int pos = 0; 
int result = data[pos++] + data[pos++]*data[pos++]; 

Могу ли я гарантировать, что мой result всегда 1 + 2 * 3, т.е. 7, или может компилятор Java или JVM Переупорядочьте выполнение операторов data[pos++], так что я, например, получаю 3 + 1 * 2, т. е. 5, так как умножение имеет приоритет над сложениями?

Другими словами: В одном утверждении, содержащем несколько операций ++, в одной и той же переменной, я уверен, что они всегда выполняются слева направо?

+0

[Я всегда схожу с ключами.] (Http://meta.stackexchange.com/questions/215379/should-drive-by-downvoting -be-more-effect-caught/215397 # 215397) –

+0

Я не один из лидеров, но я не очень хорошо понимаю ваш вопрос. Если вы хотите увидеть приоритет в Java операторов, вы можете увидеть его здесь: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –

+0

@SotiriosDelimanolis На самом деле этот вопрос отличается от один из которых вы связали. Тот, который вы связали, задает порядок, когда правая сторона вычисления оценивается перед левой стороной. Мой вопрос касается только правой стороны. Кроме того, в связанном с вами вопросе любое переупорядочение терминов 'x ++ 'даст тот же ответ из-за коммутативного свойства операции умножения. –

ответ

1

В Java это гарантировано.

От Java Language Specification, section 15.7.1:

появляется левый операнд бинарного оператора быть полностью оценены до любой части правого операнда вычисляется.

Это означает, что в a+b, a вычисляется перед b, и в x*yx вычисляется перед y.

У вас есть выражение вида p + (q * r). По вышеуказанному правилу, p должен быть оценен до (q * r). И при оценке q * r, q необходимо оценить до r. Поэтому p необходимо оценить, затем q, затем r.

(Обратите внимание, что это поведение отличается от C и C++)

1

Цитирование Java Language Specification:

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

Смежные вопросы