Давайте рассмотрим следующий код:Влияние порядка операций на оператора инкремента
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, так как умножение имеет приоритет над сложениями?
Другими словами: В одном утверждении, содержащем несколько операций ++
, в одной и той же переменной, я уверен, что они всегда выполняются слева направо?
[Я всегда схожу с ключами.] (Http://meta.stackexchange.com/questions/215379/should-drive-by-downvoting -be-more-effect-caught/215397 # 215397) –
Я не один из лидеров, но я не очень хорошо понимаю ваш вопрос. Если вы хотите увидеть приоритет в Java операторов, вы можете увидеть его здесь: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –
@SotiriosDelimanolis На самом деле этот вопрос отличается от один из которых вы связали. Тот, который вы связали, задает порядок, когда правая сторона вычисления оценивается перед левой стороной. Мой вопрос касается только правой стороны. Кроме того, в связанном с вами вопросе любое переупорядочение терминов 'x ++ 'даст тот же ответ из-за коммутативного свойства операции умножения. –