3
respuestas

[Duda] Caso particular de post-incremento

Hola!! Estoy bastante confundida ya que por esta línea de código:

int num = 5;
int resultado = num++; //num es atribuido primero a la variable resultado y depués es incrementado para 6

Entiendo que lo que hace el código es que a la variable resultado primero se le asigna el valor original de la variable num (5) y después se incrementa la variable num en 1, por lo tanto nos queda que num es 6 (pues fue incrementado) y resultado es 5 (pues se le asignó la variable num antes de ser inrementada). Pero no entiendo este ejemplo:

int num=5;
num=num++;
System.out.println(num);

En este caso siguiendo lo que entendí del ejemplo anterior, primero debería asignarse al valor de num (sin incrementar) a num, es decir num sigue siendo 5, y luego incrementar la variable num en 1, es decir que luego debería ser 6, pero esto no ocurre así, al ejecutar el código num sigue siendo 5, es como si la asignación anulase/sobreescribiera el post-incremento. Y no entiendo por qué ocurre esto,porque por lo que entendí de la teoría, no debería ser el post-incremento el que sobrescriba la asignación? ya que el post-incremento aumenta el valor de la variable en 1 después de usarla en una expresión.

3 respuestas

Tambien tengo la misma duda :s

supongo que deber ser un orden gerarquico donde la asignacion tiene mas validez que el operador de incremento. por eso anula o no toma encuento el pos incrmento.

num++ primero asigna el valor, después se incrementa pero el incremento no implica que se asigne el nuevo incremento, se puede considerar que del otro lado es solo un espacio temporal en la memoria que no guarda el resultado a menos que lo asignes, en caso de ++num primero incrementa y asigna el valor a num entonces el resultado puede ser utilizado a partir de ese momento, por lo tanto la variable no cambiará ya que estás asignando 5 nuevamente, a menos que utilices num++; en este caso si se incrementa.

Puedes utilizar esta secuencia:

int num = 5;   //opción 1
Sys....(++num);

int num = 5;   //opción 2
num++;
Sys....(num);