numero - for java
La diferencia entre++ Var y Var++ (8)
tldr;
Aunque var++
y ++var
incrementan la variable a la que se aplican, el resultado devuelto por var++
es el valor de la variable antes del incremento, mientras que el resultado devuelto por ++var
es el valor de la variable después de que se aplica el incremento.
Explicación adicional
Cuando ++var
o var++
forman una declaración completa (como en sus ejemplos) no hay diferencia entre los dos. Por ejemplo los siguientes
int x = 6;
++x;
assert x == 7;
es idéntico a
int x = 6;
x++;
assert x == 7;
Sin embargo, cuando se utilizan ++var
o var++
como parte de una declaración mayor, es posible que los dos no sean equivalentes. Por ejemplo, la siguiente aserción pasa
int x = 6;
assert ++x == 7;
mientras que este falla
int x = 6;
assert x++ == 7;
Aunque var++
y ++var
incrementan la variable a la que se aplican, el resultado devuelto por var++
es el valor de la variable antes del incremento, mientras que el resultado devuelto por ++var
es el valor de la variable después de que se aplica el incremento.
Cuando se usa en un bucle for
, no hay diferencia entre los dos porque el incremento de la variable no forma parte de una declaración más grande. Puede que no aparezca de esta manera, porque hay otro código en la misma línea del archivo fuente. Pero si miras de cerca, verás que hay un ;
inmediatamente antes del incremento y nada después, por lo que el operador del incremento no forma parte de una declaración mayor.
Esta pregunta ya tiene una respuesta aquí:
En programación, particularmente en Java, cuál es la diferencia entre:
int var = 0;
var++;
y
int var = 0;
++var;
¿Qué repercusiones tendría esto en un bucle for?
p.ej
for (int i = 0; i < 10; i++) {}
for (int i = 0; i < 10; ++i) {}
++ i es preincremento, se realiza antes de que aparezca algo en la expresión.
i ++ es posterior al decremento, se realiza después de que aparezca algo en la expresión.
en el primer bucle, correrás de 0 a 9. En el segundo, correrá de 1 a 9.
Mi consejo: evite ambos (las excepciones pueden ser i ++; o el primer bucle). Demasiado difícil de buscar en la expresión.
Pasé un largo día depurando
myArray [(i ++)% 16] = datos
y tratando de encontrar por qué intentó escribir en datos [16] a veces
Ambos ++var
y var++
son idénticos cuando aparecen solo en la expresión. Esto se aplica a tu pregunta porque solo tienes ++i
, i++
La diferencia solo tiene lugar cuando los alineas:
int x = 0;
printf( "%d %d/n", ++x, x ); // 1 1
printf( "%d %d/n", x++, x ); // 1 2
¿Cómo recordar?
Cuando vea primero el operador, a continuación, aumente y luego tome el valor.
Cuando vea primero la variable, tome el valor y luego aumente.
Entonces en el primer ejemplo ves valores iguales porque:
you increment `x`, then access `x`, then access `x` again
Entonces en el segundo ejemplo ves diferencias porque:
you access `x`, then increment `x`, then access `x` again
De hecho, esto es bastante simple. El preincremento ++ i se ejecuta primero en la declaración.
j = ++i +1;
es equivalente a
i = i+1;
j = i+1;
mientras que el incremento post i ++ se ejecuta al final;
j = i++ +1;
es equivalente a
j = i+1;
i = i+1;
En sus ejemplos, no hay diferencia, sin embargo hay una diferencia entre:
int var = 0;
int var2 = ++var;
y:
int var = 0;
int var2 = var++;
En el primer caso, el valor de var2 es 1, mientras que en el segundo es 0.
var ++ devuelve su valor antes de incrementar.
++ var devuelve su valor después de incrementar.
int var = 0;
System.out.println(var++); // returns 0;
var = 0;
System.out.println(++var); // returns 1
++var
es el operador de pre-incremento; incrementa el valor de var
antes de evaluar la expresión. De manera similar, var++
es el operador post-incremento; incrementa el valor de var
después de evaluar la expresión.
En el caso de un bucle simple, no hay diferencia entre dos, porque las expresiones ++var;
y var++;
Ambos ceden al mismo resultado.
Para obtener más información, consulte, por ejemplo, http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter02/operators.html#IncDecOps .
int a = 5, b;
post incremento : b = a++;
: a
primero se transfiere a b
y luego a
se incrementa, por lo que ahora b
es 5
y a
es 6
El efecto es b = a; a = a + 1;
b = a; a = a + 1;
pre incremento : b = ++a;
: primero a
se incrementa y luego el resultado se transfiere a b
, por lo que ahora a
es 7
y también b
es 7
. El efecto es a = a + 1; b = a
a = a + 1; b = a
a++
y ++a
permanecer independientemente actúan de la misma manera. En los ejemplos de bucle que ha presentado, los operadores de incremento no están asociados en ninguna expresión y son independientes. Por lo tanto, estos dos en esta implementación particular son idénticos.