Una construcción como x = x++;
indica que probablemente estás malinterpretando lo ++
que hace el operador:
// original code
int x = 7;
x = x++;
Reescribamos esto para hacer lo mismo, basándonos en eliminar el ++
operador:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Ahora, reescribamos para hacer (lo que creo) que querías:
// original code
int x = 7;
x++;
La sutileza aquí es que el ++
operador modifica la variablex
, a diferencia de una expresión como x + x
, que evaluaría a un valor int pero dejaría la variable en x
sí misma sin cambios. Considere una construcción como el venerable for
bucle:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Observe el i++
de allí? Es el mismo operador. Podríamos reescribir este for
bucle así y se comportaría igual:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
También recomiendo no usar el ++
operador en expresiones más grandes en la mayoría de los casos. Debido a la sutileza de cuando modifica la variable original en el incremento previo versus posterior ( ++x
y x++
, respectivamente), es muy fácil introducir errores sutiles que son difíciles de rastrear.
int x = 7; x = ++x;
por supuesto, sigue siendo un código horrible, no necesita reasignarlo.int x = 7; x++;
es suficiente.