Java: множественный ++ - увеличивается в одну строку.Какой первый? - PullRequest
2 голосов
/ 12 февраля 2011

Эй, У меня есть следующие две строки кода:

result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];
i += 2;

Мне интересно, будет ли эта строка кода делать то же самое:

    result[i] = temp[i] + temp[i++] + " " + temp[i++];

Могу ли я быть уверен, что КАЖДЫЙ ВМ будет обрабатывать строку слева направо? Спасибо, Tobi

Ответы [ 5 ]

11 голосов
/ 12 февраля 2011

С Спецификация языка Java :

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

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

7 голосов
/ 12 февраля 2011

Давайте просто попробуем на самом деле процитировать источник .

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

Похоже, кто-то также нашел ссылку на спецификацию .

7 голосов
/ 12 февраля 2011

Это должно быть

result[i] = temp[i] + temp[++i] + " " + temp[++i];

, если я не ошибаюсь, чтобы индексы вычислялись после каждого приращения.Кроме того, это должно работать.

4 голосов
/ 12 февраля 2011

Нет, это не то же самое.Когда вы ставите ++ после i, это подразумевает, что это постфикс, то есть я буду сначала использоваться, а затем увеличен.

Итак:

result[i] = temp[i] + temp[i++] + " " + temp[i++];

будет таким же, как показано ниже,я = 1:

result[1] = temp[1] + temp[1] + " " + temp[2];

и после этого утверждения я буду сидеть со значением 3.

Для того, чтобы оно было таким же, как:

result[i] = temp[i] + temp[i + 1] + " " + temp[i + 2];

Выследует использовать префиксный оператор приращения, например:

result[i] = temp[i] + temp[++i] + " " + temp[++i];
2 голосов
/ 12 февраля 2011
i++ will output the value and increment
++i will increment the value and output.
...