Разница между ++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 ответов:
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