... y votación a favor de la primera de las respuestas idénticas para entrar ...
skaffman
9
para que el botín sea más rápido, ordene por más antiguo, haga clic en votar a favor. ohowoho.
dotjoe
1
¡Estaba seguro de que lo tenía! La respuesta de Emil es mejor de todos modos.
Victor
Respuestas:
290
++ x se denomina preincremento, mientras que x ++ se denomina postincremento.
int x =5, y =5;System.out.println(++x);// outputs 6System.out.println(x);// outputs 6System.out.println(y++);// outputs 5System.out.println(y);// outputs 6
@ Tom, solo estaba considerando cómo emitir mis votos, así que aquí está mi interpretación: una pequeña razón para preferir la respuesta de Emil H es que su código de ejemplo es / un poco / más informativo.
Jonik
Jonik. Es cierto, también incluye las palabras clave "preincrement" y "postincrement".
Tom
Esta "respuesta" solo le dice una salida de caso de prueba, y considero que las salidas no son respuestas. Por el contrario, normalmente el resultado (inesperado) de alguna ejecución de código conduce a la pregunta. De ahí mi voto en contra.
Alberto de Paola
8
Aterricé aquí desde uno de sus duplicados recientes , y aunque esta pregunta está más que respondida, no pude evitar descompilar el código y agregar "otra respuesta más" :-)
Para ser exactos (y probablemente un poco pedantes),
int y =2;
y = y++;
se compila en:
int y =2;int tmp = y;
y = y+1;
y = tmp;
Si eres de javacesta Y.javaclase:
publicclass Y {publicstaticvoid main(String[]args){int y =2;
y = y++;}}
y javap -c Yobtienes el siguiente código jvm (me permití comentar el método principal con la ayuda de la Especificación de la máquina virtual Java ):
publicclass Y extends java.lang.Object{public Y();Code:0: aload_0
1: invokespecial #1;//Method java/lang/Object."<init>":()V4:returnpublicstaticvoid main(java.lang.String[]);Code:0: iconst_2 // Push int constant `2` onto the operand stack. 1: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.2: iload_1 // Push the value (`2`) of the local variable at index `1` (`y`)// onto the operand stack3: iinc 1,1// Sign-extend the constant value `1` to an int, and increment// by this amount the local variable at index `1` (`y`)6: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.7:return}
++ x es una forma de prefijo:
incrementa la expresión de las variables y luego usa el nuevo valor en la expresión.
Por ejemplo, si se usa en el código:
int x =3;int y =++x;//Using ++x in the above is a two step operation.//The first operation is to increment x, so x = 1 + 3 = 4//The second operation is y = x so y = 4System.out.println(y);//It will print out '4'System.out.println(x);//It will print out '4'
x ++ es una forma de sufijo:
el valor de las variables se usa primero en la expresión y luego se incrementa después de la operación.
Por ejemplo, si se usa en el código:
int x =3;int y = x++;//Using x++ in the above is a two step operation.//The first operation is y = x so y = 3//The second operation is to increment x, so x = 1 + 3 = 4System.out.println(y);//It will print out '3'System.out.println(x);//It will print out '4'
Espero que esto quede claro. Ejecutar y jugar con el código anterior debería ayudarlo a comprender.
Sí, al usar ++ X, se usará X + 1 en la expresión. Al usar X ++, X se usará en la expresión y X solo aumentará después de que se haya evaluado la expresión.
Entonces, si X = 9, usando ++ X, se usará el valor 10, de lo contrario, el valor 9.
Sí, el valor devuelto es el valor antes y después del incremento, respectivamente.
classFoo{publicstaticvoid main(String args[]){int x =1;int a = x++;System.out.println("a is now "+ a);
x =1;
a =++x;System.out.println("a is now "+ a);}}
$ java Foo
a is now 1
a is now 2
OK, aterricé aquí porque recientemente encontré el mismo problema al verificar la implementación de la pila clásica. Solo un recordatorio de que esto se usa en la implementación basada en matrices de Stack, que es un poco más rápida que la de lista vinculada.
Código a continuación, verifique la función push y pop.
publicclassFixedCapacityStackOfStrings{privateString[] s;privateint N=0;publicFixedCapacityStackOfStrings(int capacity){ s =newString[capacity];}publicboolean isEmpty(){return N ==0;}publicvoid push(String item){ s[N++]= item;}publicString pop(){String item = s[--N];
s[N]=null;return item;}}
Sí, hay una diferencia, en caso de x ++ (posincremento), el valor de x se usará en la expresión y x se incrementará en 1 después de que la expresión haya sido evaluada, por otro lado ++ x (preincremento), x + Se usará 1 en la expresión. Tome un ejemplo:
publicstaticvoid main(String args[]){int i , j , k =0;
j = k++;// Value of j is 0
i =++j;// Value of i becomes 1
k = i++;// Value of k is 1System.out.println(k);}
La Pregunta ya está respondida, pero permítame agregar desde mi lado también.
Primero de todo, ++ significa incremento en uno y - significa decremento en uno.
Ahora x ++ significa Incremento x después de esta línea y ++ x significa Incremento x antes de esta línea.
Ver este ejemplo
classExample{publicstaticvoid main (String args[]){int x=17,a,b;
a=x++;
b=++x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);
a = x--;
b =--x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);}}
Esta respuesta sería incluso mejor si estuviera acompañada de algunas palabras de explicación.
Thom
0
Con i ++, se llama postincremento, y el valor se usa en cualquier contexto que luego se incremente; ++ i is preincrement incrementa el valor primero y luego lo usa en contexto.
Si no lo usa en ningún contexto, no importa lo que use, pero el poscremento se usa por convención.
Respuestas:
++ x se denomina preincremento, mientras que x ++ se denomina postincremento.
fuente
si
++ x incrementa el valor de x y luego devuelve x
x ++ devuelve el valor de x y luego incrementa
ejemplo:
después de ejecutar el código, tanto a como b serán 1 pero x será 2.
fuente
Estos se conocen como operadores de sufijo y prefijo. Ambos agregarán 1 a la variable, pero hay una diferencia en el resultado de la declaración.
fuente
suffix
?Si,
imprimirá
6
yimprimirá
5
.fuente
Aterricé aquí desde uno de sus duplicados recientes , y aunque esta pregunta está más que respondida, no pude evitar descompilar el código y agregar "otra respuesta más" :-)
Para ser exactos (y probablemente un poco pedantes),
se compila en:
Si eres de
javac
estaY.java
clase:y
javap -c Y
obtienes el siguiente código jvm (me permití comentar el método principal con la ayuda de la Especificación de la máquina virtual Java ):Así, finalmente tenemos:
fuente
Al considerar lo que realmente hace la computadora ...
++ x: cargar x desde la memoria, incrementar, usar, almacenar de nuevo en la memoria.
x ++: cargar x desde la memoria, usar, incrementar, almacenar de nuevo en la memoria.
Considere: a = 0 x = f (a ++) y = f (++ a)
donde la función f (p) devuelve p + 1
x será 1 (o 2)
y será 2 (o 1)
Y ahí radica el problema. ¿El autor del compilador pasó el parámetro después de la recuperación, después del uso o después del almacenamiento?
Generalmente, use x = x + 1. Es mucho más simple.
fuente
En Java hay una diferencia entre x ++ y ++ x
++ x es una forma de prefijo: incrementa la expresión de las variables y luego usa el nuevo valor en la expresión.
Por ejemplo, si se usa en el código:
x ++ es una forma de sufijo: el valor de las variables se usa primero en la expresión y luego se incrementa después de la operación.
Por ejemplo, si se usa en el código:
Espero que esto quede claro. Ejecutar y jugar con el código anterior debería ayudarlo a comprender.
fuente
Si.
fuente
Sí, al usar ++ X, se usará X + 1 en la expresión. Al usar X ++, X se usará en la expresión y X solo aumentará después de que se haya evaluado la expresión.
Entonces, si X = 9, usando ++ X, se usará el valor 10, de lo contrario, el valor 9.
fuente
Si es como muchos otros idiomas, puede intentarlo de forma sencilla:
Si lo anterior no sucede así, pueden ser equivalentes
fuente
Sí, el valor devuelto es el valor antes y después del incremento, respectivamente.
fuente
OK, aterricé aquí porque recientemente encontré el mismo problema al verificar la implementación de la pila clásica. Solo un recordatorio de que esto se usa en la implementación basada en matrices de Stack, que es un poco más rápida que la de lista vinculada.
Código a continuación, verifique la función push y pop.
fuente
Sí, hay una diferencia, en caso de x ++ (posincremento), el valor de x se usará en la expresión y x se incrementará en 1 después de que la expresión haya sido evaluada, por otro lado ++ x (preincremento), x + Se usará 1 en la expresión. Tome un ejemplo:
fuente
La Pregunta ya está respondida, pero permítame agregar desde mi lado también.
Primero de todo, ++ significa incremento en uno y - significa decremento en uno.
Ahora x ++ significa Incremento x después de esta línea y ++ x significa Incremento x antes de esta línea.
Ver este ejemplo
Dará la siguiente salida:
fuente
Con i ++, se llama postincremento, y el valor se usa en cualquier contexto que luego se incremente; ++ i is preincrement incrementa el valor primero y luego lo usa en contexto.
Si no lo usa en ningún contexto, no importa lo que use, pero el poscremento se usa por convención.
fuente
Hay una gran diferencia.
Como la mayoría de las respuestas ya han señalado la teoría, me gustaría señalar un ejemplo sencillo:
Ahora veamos
++x
:fuente