Hay una diferencia grande entre las versiones de sufijo y el prefijo de ++
.
En la versión prefijo (es decir, ++i
), el valor de i
se incrementa, y el valor de la expresión es el nuevo valor de i
.
En la versión postfijo (es decir, i++
), el valor de i
se incrementa, pero el valor de la expresión es el valor original de i
.
Analicemos el siguiente código línea por línea:
int i = 10; // (1)
int j = ++i; // (2)
int k = i++; // (3)
i
se establece en 10
(fácil).
- dos cosas en esta línea:
i
se incrementa a 11
.
- El nuevo valor de
i
se copia en j
. Entonces j
ahora es igual a 11
.
- dos cosas en esta línea, así:
i
se incrementa a 12
.
- El original valor de
i
(que es 11
) se copia en k
. Entonces k
ahora es igual a 11
.
Así que después de ejecutar el código, i
habrá 12 pero ambos j
y k
habrá 11.
lo mismo es válido para las versiones de sufijo y el prefijo de --
.
'retorno i ++' 'Volveré 10. retorno ++ I' volvería 11. – Nemo
Porque lo que está sucediendo realmente son dos cosas, primero 'i' se devuelve y luego 'i' se está incrementando. Si escribe '++ i' entonces esas dos cosas suceden en el orden opuesto. – sketchyTech
Al devolver 'i ++' se crea una expresión 'int i = i ++;'. Vamos a reescribir esto como 'int j = i ++;' por lo que es más fácil de explicar. Esta es la versión posterior a la corrección de 'i', que significa incrementar' i' después de establecer 'j = i'. Debido a que estos son enteros primitivos, 'i' está profundamente copiado a' j' (no es una copia superficial, con una referencia de puntero), y por lo tanto 'j = 10'. Entonces 'i' se incrementa, entonces' i = i + 1', y por lo tanto 'i = 11'. La versión anterior al arreglo incrementará 'i' antes de que se copie a' j', y por lo tanto ambas variables tendrán el mismo valor ('j = 11',' i = 11'). – tfmontague