Разница между ++Var и Var++ [дубликат]


этот вопрос уже есть ответ здесь:

  • Как работают операторы post increment (i++) и pre increment (++i) в Java? 14 ответов

в программировании, особенно на Java, в чем разница между:

int var = 0;
var++;

и

int var = 0;
++var;

какие последствия это будет иметь для A петля?

например

for (int i = 0; i < 10; i++) {}

for (int i = 0; i < 10; ++i) {}
8 60

8 ответов:

tldr;

хотя и var++ и ++var увеличьте переменную, к которой они применяются, результат, возвращаемый var++ - это значение переменной перед приращением, тогда как результат, возвращаемый ++var значение переменной после применения инкремента.

Дальнейших Объяснений

, когда ++var или var++ сформировать полное заявление (как в ваших примерах) нет никакой разницы между ними. Например после

int x = 6;
++x;
assert x == 7;

идентичен

int x = 6;
x++;
assert x == 7;

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

int x = 6;
assert ++x == 7;

в то время как этот терпит неудачу

int x = 6;
assert x++ == 7;

хотя и var++ и ++var увеличьте переменную, к которой они применяются, результат, возвращаемый var++ - это значение переменной перед приращением, тогда как результат, возвращаемый ++var значение переменной после применения инкремента.

при использовании for цикл, нет никакой разницы между ними, потому что приращение переменной не является частью более крупного оператора. Это может быть не так, потому что в той же строке исходного файла есть другой код. Но если вы посмотрите внимательно, вы увидите, что есть ; непосредственно перед приращением и ничего после этого, так что приращение оператор не является частью более крупного оператора.

++var - Это оператор предварительного приращения; он увеличивает значение varдо оценки выражения. Точно так же,var++ - это оператор постинкремента; он увеличивает значение varпосле оценки выражения.

в случае простого цикла, нет никакой разницы между двумя, потому что выражения ++var; и var++; оба дают один и тот же результат.

для получения дополнительной информации, см., например, http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter02/operators.html#IncDecOps.

int a = 5, b;

пост инкремент:b = a++;:a это b а то a увеличивается, так что теперь b - это 5 и a и 6 эффект b = a; a = a + 1;

pre increment:b = ++a; : во-первых a увеличивается, а затем переведен в b, Теперь a и 7 и b - это 7. Эффект a = a + 1; b = a

a++ и ++a оставаясь самостоятельно действовать аналогичным образом. В приведенных примерах циклов операторы инкремента не связаны ни с одним выражением и являются независимыми. Поэтому эти два варианта в данной конкретной реализации идентичны.

в ваших примерах, нет никакой разницы, есть же разница между:

int var = 0;
int var2 = ++var;

и:

int var = 0;
int var2 = var++;

в первом случае значение var2 равно 1, а во втором-0.

var++ возвращает свое значение перед увеличением.
++var возвращает свое значение после увеличения.

int var = 0;
System.out.println(var++); // returns 0;

var = 0;
System.out.println(++var); // returns 1

++i-это предрождество, это делается до того, как что-либо появится в выражении.

i++ - это postdecrement, это делается после того, как что-либо в выражении появляется.

в первом цикле, вы будете работать от 0 до 9. Во втором, он будет работать от 1 до 9.

мой совет: избегайте обоих из них (исключения могут быть i++; или первый цикл). Слишком сложно искать в выражении лица.

Я прошел долгий день отладки

myArray [(i++)%16] = данные

и пытается найти, почему он пытался писать в data [16] иногда

на самом деле, это довольно просто. Preincrement ++i выполняется первым в инструкции.

j = ++i +1;

эквивалентно

i = i+1;
j = i+1;

в то время как пост инкремент i++ выполняется в конце;

j = i++ +1;

эквивалентно

j = i+1;
i = i+1;

и ++var и var++ идентичны, когда появляются только в выражении. Это относится к вашему вопросу, потому что у вас есть только ++i,i++

это различие имеет место только тогда, когда вы вставляете их:

int x = 0;
printf( "%d %d\n", ++x, x ); // 1 1
printf( "%d %d\n", x++, x ); // 1 2

Как запомнить?

когда вы видите сначала оператор, затем инкремент и позже взять значение.

когда вы видите сначала переменная, затем принять значение и позже прирост.

так, в первом примере вы видите равные значения, потому что:

you increment `x`, then access `x`, then access `x` again  

Итак, во втором примере вы видите различия, потому что:

you access `x`, then increment `x`, then access `x` again