Хороший вопрос.
Существует разница между a++
и ++a
. В Java (по крайней мере) каждый будет увеличивать переменную, но значение, представленное выражением, отличается.
int i = 0;
System.out.println(i++); // 0
int j = 0;
System.out.println(++j); // 1
Так вы приращением a
1, но затем установить его обратно к исходному значению.
От the Java Tutorial:
Операторы инкремента/декремента могут применяться до (префикс) или после (постфикс) операнда. Результат кода ++; и ++ результат; оба будут заканчиваться результатом, увеличиваясь на единицу. Единственное различие заключается в том, что префиксная версия (результат ++) оценивается с добавочным значением, тогда как постфиксная версия (результат ++) оценивает исходное значение. Если вы просто выполняете простой приращение/декремент, на самом деле не имеет значения, какую версию вы выберете. Но если вы используете этот оператор в части большего выражения, то тот, который вы выберете, может иметь существенное значение.
http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors-iiiii-etc - часть C является неопределенным поведением, вы не можете полагаться на нее (может печатать что-нибудь). Часть Java соответствует спецификации Java, т. Е. Результат, который вы видите, является ожидаемым поведением. – Mat
В 'C', код, который вы опубликовали, имеет неопределенное поведение. Он не работает корректно, потому что нет определения правильного поведения для этого кода! Хотя в вашей среде он печатает 34, в других он будет печатать 33. –
http://stackoverflow.com/questions/11570589/java-i-operation-explanation - для части Java – Mat