2010-03-04 5 views

Respuesta

14

i++ es una postincreción (JLS 15.14.2). Incrementa i, pero el resultado de la expresión es el valor de iantes de el incremento. Asignar este valor de nuevo a i mantiene el valor de i sin modificar.

romper hacia abajo como esto:

int i = 0; 
int j = i++; 

Es fácil ver por qué j == 0 en este caso. Ahora, en lugar de j, sustituimos el lado izquierdo por i. El valor del lado derecho sigue siendo 0, y es por eso que obtienes i == 0 en tu fragmento.

4

que significaba para hacer esto:

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

i++ realmente hace una asignación por lo que si se agrega una = que acaba de confundir las cosas. Estos otros respondedores finos pueden darte los detalles, algunos detalles me escapan. :)

0

Lo primero es que no se debe escribir este tipo de código ....

Pero si tenemos en cuenta en aras preguntas, entonces este sencillo: tiene que ver con la forma en que los operadores de sufijo "retornos" el valor. Un postfijo tiene precedencia sobre el operador de asignación, pero el operador de postfijo después de incrementar el valor de i devuelve el valor anterior de i. Entonces vuelvo a asignarle su valor anterior.

Y una vez más no utilizan esta construcción en el código como el siguiente programador que ve esto vendrá después (con algo grande en sus manos) :)

0

Deje I=++, un aumento, y A=i, un trabajo. No son conmutativos: IA != AI.

Resumen

IA = "first increase then assignment"

contraejemplo

$ javac Increment.java 
$ java Increment 
3 
$ cat Increment.java 
import java.util.*; 
import java.io.*; 

public class Increment { 
    public static void main(String[] args) { 
     int i=0; 
     i=++i; 
     i=++i; 
     i=++i; 
     System.out.println(i); 
    } 
} 

relacionadas

Cuestiones relacionadas