¿Por qué `index = index ++` no incrementa `index`?

votos
0

** Dup: ¿Cuál es la diferencia entre X = X ++; vs X ++ ;? **

Entonces, aunque sé que en realidad nunca harías esto en código, todavía tengo curiosidad:

public static void main(String[] args) {
    int index = 0;
    System.out.println(index);   // 0
    index++;
    System.out.println(index);   // 1
    index = index++;
    System.out.println(index);   // 1
    System.out.println(index++); // 1
    System.out.println(index);   // 2
}

Tenga en cuenta que el tercero sysoutestá quieto 1. En mi opinión, la línea index = index++;significa establecer índice para indexar, luego incrementar índice en 1 de la misma manera System.out.println(index++);significa pasar índice al método println luego incrementar el índice en 1.

Este no es el caso, sin embargo. ¿Alguien puede explicar lo que está pasando?

Publicado el 09/12/2008 a las 23:00
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
4

esta es una pregunta duplicada

EDITAR: Parece que no puedo encontrar el original: P oh bien

a = a ++ usa el postincrement, que el compilador interpreta como:

a = function() {
   var old_value = a;
   a++;
   return old_value;
}

EDIT 2: ¿Cuál es la diferencia entre X = X ++; vs X ++ ;?

Respondida el 09/12/2008 a las 23:01
fuente por usuario

votos
3

value++; es un incremento posterior.

int firtValue = 9;
int secondValue = firstValue++;

firstValue ahora es 10, pero secondValue es 9, el valor de firstValue antes de que se incrementara.

Ahora con pre-incremento:

int firtValue = 9;
int secondValue = ++firstValue;

firstValue y secondValue ahora son 10, fistValue se incrementa y luego su valor se asigna a secondValue.

Respondida el 09/12/2008 a las 23:04
fuente por usuario

votos
1

Nunca he intentado algo como esto, pero estoy dispuesto a serlo, la tarea sucede después del incremento.

Entonces, lo que realmente sucede en lo que respecta al compilador es:

  1. Evaluar índice
  2. Mantener el valor del índice para más tarde
  3. Incrementa el valor del índice
  4. Asigne el valor anterior del índice, limpie el incremento.
Respondida el 09/12/2008 a las 23:05
fuente por usuario

votos
1

El operador de index++incremento posterior incrementa la variable, pero devuelve su valor anterior, por lo tanto

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

imprimirá 5, sin embargo, ahora es igual a 6.

si desea devolver el valor después de la operación de incremento use ++index

Respondida el 09/12/2008 a las 23:04
fuente por usuario

votos
1

La asignación ocurre después de que la expresión ha sido evaluada. Por lo tanto, el índice ++ tiene un valor de 0, aunque a medida que aumenta el índice de efectos secundarios. Entonces el valor (0) se asigna al índice.

Respondida el 09/12/2008 a las 23:02
fuente por usuario

votos
0

Tienes que mirar el orden en que se evalúan las cosas.

en la siguiente declaración

índice = índice ++;

suceden tres cosas 1) dado que es un índice ++, el valor del índice está determinado 2) el índice se incrementa, 3) el valor que se determinó en el paso uno se asigna a la variable en el lado izquierdo de la ecuación

Respondida el 09/12/2008 a las 23:06
fuente por usuario

votos
-1

Consulte http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html para obtener información sobre las reglas de evaluación del postfijo.

Consulte también http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39438 para obtener información.

Respondida el 09/12/2008 a las 23:06
fuente por usuario

votos
-1

La respuesta a esta pregunta debería ayudar. El incremento posterior actualiza el valor del índice pero devuelve el valor antes de la actualización.

Respondida el 09/12/2008 a las 23:04
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more