while statement loop for español enhanced java

statement - ¿Cuál es la diferencia entre i++ &++ i en for loop(Java)?



if statement java (7)

Ambos incrementan la variable i en uno. Es como decir i = i + 1 . La diferencia es sutil. Si lo estás utilizando en un bucle como este, no hay diferencia:

for (int i = 0; i < 100; i++) { } for (int i = 0; i < 100; ++i) { }

Si quieres saber la diferencia, mira este ejemplo:

int a = 0; int b = a++; // b = 0; a = 1 a = 0; b = ++a: // b = 1; a = 1

La idea es que ++a incrementa a y devuelve ese valor, mientras que a++ devuelve el valor de a y luego incrementa a .

Posibles duplicados:
Diferencia entre i ++ y ++ i en un bucle?
¿Hay alguna diferencia entre x ++ y ++ x en java?

hola, acabo de empezar a aprender Java y ahora estoy interesado en la instrucción de bucle. No entiendo cómo ++ i i ++ funciona en una sentencia de bucle for.

Me refiero a cómo funcionan en operaciones matemáticas como la suma y la resta. Espero que alguien me explique esto.


Aquí hay una muestra de clase:

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

Si desmonto esta clase usando javap.exe obtengo esto:

Compiled from "Increment.java" public class Increment extends java.lang.Object{ public Increment(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_0 1: istore_1 2: iload_1 3: aload_0 4: arraylength 5: if_icmpge 23 8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 11: aload_0 12: iload_1 13: aaload 14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 17: iinc 1, 1 20: goto 2 23: return }

Si cambio el bucle para que use i ++ y desarme nuevamente, obtengo esto:

Compiled from "Increment.java" public class Increment extends java.lang.Object{ public Increment(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_0 1: istore_1 2: iload_1 3: aload_0 4: arraylength 5: if_icmpge 23 8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 11: aload_0 12: iload_1 13: aaload 14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 17: iinc 1, 1 20: goto 2 23: return }

Cuando comparo los dos, TextPad me dice que los dos son idénticos.

Lo que esto dice es que, desde el punto de vista del código de byte generado, no hay diferencia en un bucle. En otros contextos, hay una diferencia entre ++ i y i ++, pero no para los bucles.


La diferencia es que el operador i++ post-incremento devuelve i como estaba antes de incrementarse, y el operador de pre-incremento ++i devuelve i como está después de incrementarse. Si estás preguntando por un típico bucle for :

for (i = 0; i < 10; i++)

o

for (i = 0; i < 10; ++i)

Son exactamente iguales, ya que no estás utilizando i++ o ++i como parte de una expresión más grande.


La forma en que se procesa el bucle es la siguiente

1 Primero, se realiza la inicialización (i = 0)

2 se realiza la comprobación (i <n)

3 se ejecuta el código en el bucle.

4 el valor se incrementa

5 repite los pasos 2 - 4

Esta es la razón por la que no hay diferencia entre i ++ y ++ i en el bucle for que se ha utilizado.


Tanto i++ como ++i son cortos para i = i + 1 .

Además de cambiar el valor de i, también devuelven el valor de i, ya sea antes de agregar uno ( i++ ) o después de agregar uno ( ++i ).

En un bucle, el tercer componente es un fragmento de código que se ejecuta después de cada iteración.

for (int i=0; i<10; i++)

El valor de esa parte no se usa, por lo que lo anterior es igual a

for(int i=0; i<10; i = i+1)

o

for(int i=0; i<10; ++i)

Donde hace una diferencia (entre i++ y ++i ) es en estos casos

while(i++ < 10) for (int i=0; i++ < 10; )


JLS§14.14.1, El básico para Sentencia , aclara que las expresiones de ForUpdate se evalúan y los valores se descartan . El efecto es hacer que las dos formas sean idénticas en el contexto de una declaración for .


Ambos incrementan el número. ++i es equivalente a i = i + 1 .

i++ y ++i son muy similares pero no exactamente iguales. Ambos incrementan el número, pero ++i incrementa el número antes de que se evalúe la expresión actual, mientras que i++ incrementa el número después de que se evalúa la expresión.

int i = 3; int a = i++; // a = 3, i = 4 int b = ++a; // b = 4, a = 4