Подтвердить что ты не робот

Разница между ++ Var и Var ++

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

int var = 0;
var++;

и

int var = 0;
++var;

Какие последствия будут иметь в цикле for?

например.

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

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

Ответ 1

TL;DR;

Хотя оба 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 между ними нет разницы, потому что приращение переменной не является частью более крупного оператора. Возможно, это не так, потому что в той же строке исходного файла есть другой код. Но если вы посмотрите внимательно, вы увидите, что есть ; непосредственно перед приращением и ничего не происходит после этого, поэтому оператор приращения не является частью более крупного оператора.

Ответ 2

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

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

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

Ответ 3

int a = 5, b;

post increment: 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, находящиеся независимо друг от друга, действуют аналогичным образом. В приведенных примерах цикла операторы приращения не связаны ни в одном выражении, ни независимы. Поэтому эти два в этой конкретной реализации идентичны.

Ответ 4

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

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

и

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

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

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

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

Ответ 7

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

j = ++i +1;

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

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

тогда как post increment я ++ выполняется в конце;

j = i++ +1;

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

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