¿Hay alguna diferencia entre ++ x y x ++ en java?¿Hay alguna diferencia entre x ++ y ++ x en java?
Respuesta
++ x se llama preincremento, mientras que x ++ se llama postincremento.
int x = 5, y = 5;
System.out.println(++x); // outputs 6
System.out.println(x); // outputs 6
System.out.println(y++); // outputs 5
System.out.println(y); // outputs 6
Buena explicación –
Buena explicación, 1 ++. Vaya, ++ 1 :) – nawfal
@Emil H, + 1 para una explicación perfecta. –
Sí,
int x=5;
System.out.println(++x);
imprimirá 6
y
int x=5;
System.out.println(x++);
imprimirá 5
.
¿Por qué esto solo es +1 y la misma respuesta, publicada en el mismo instante es +5? – Tom
Porque nos estamos convirtiendo en slashdot ... lentamente ... seguramente ... – skaffman
@Tom, estaba considerando cómo emitir mi voto, así que esta es mi interpretación: una pequeña razón para preferir la respuesta de Emil H es que su ejemplo el código es/levemente/más informativo. – Jonik
sí
++ x incrementa el valor de x y después vuelve x
x ++ devuelve el valor de x y luego incrementos de
ejemplo:
x=0;
a=++x;
b=x++;
después se ejecuta el código ambos a y b serán 1 pero x será 2.
+1 Muchos ejemplos, esta es una _explicación_ con ejemplos :) –
Sí, también terminé votando esta por la clara explicación en prosa al principio. (Hmm, no sabía que puedes hacer cursiva en los comentarios de hoy ... * genial *) – Jonik
Sí, usando ++ X, X + 1 se usará en la expresión. Usando X ++, X se usará en la expresión y X solo se incrementará después de que se haya evaluado la expresión.
Así que si X = 9, usando ++ X, se utilizará el valor 10, de lo contrario, el valor 9.
Si es como muchos otros idiomas es posible que desee tener una oportunidad sencilla:
i = 0;
if (0 == i++) // if true, increment happened after equality check
if (2 == ++i) // if true, increment happened before equality check
Si lo anterior no sucede así, que pueden ser equivalentes
Sí.
public class IncrementTest extends TestCase {
public void testPreIncrement() throws Exception {
int i = 0;
int j = i++;
assertEquals(0, j);
assertEquals(1, i);
}
public void testPostIncrement() throws Exception {
int i = 0;
int j = ++i;
assertEquals(1, j);
assertEquals(1, i);
}
}
Sí, el valor devuelto es el valor antes y después del incremento, respectivamente.
class Foo {
public static void 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
Se conocen como operadores de prefijo y prefijo. Ambos agregarán 1 a la variable pero hay una diferencia en el resultado de la declaración.
int x = 0;
int y = 0;
y = ++x; // result: y=1, x=1
int x = 0;
int y = 0;
y = x++; // result: y=0, x=1
¿No debería ser 'sufijo'? – HyperNeutrino
aterricé aquí desde uno de sus últimos dup 's, y aunque esta pregunta es más que respondió, no pude evitar descompilación el código y añadir 'otra respuesta' :-)
para ser preciso (y, probablemente, un poco pedante),
int y = 2;
y = y++;
se compila en:
int y = 2;
int tmp = y;
y = y+1;
y = tmp;
Si javac
este Y.java
clase:
public class Y {
public static void main(String []args) {
int y = 2;
y = y++;
}
}
y javap -c Y
, se obtiene el siguiente código JVM (I ha permitido que comente el principal método con la ayuda de la Java Virtual Machine Specification):
public class Y extends java.lang.Object{
public Y();
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_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 stack
3: 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
}
lo tanto , finalmente tenemos:
0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp
OK, llegué aquí porque recientemente me encontré con el mismo problema cuando verificando la implementación clásica de la pila. Solo un recordatorio de que esto se usa en la implementación basada en matriz de Stack, que es un poco más rápida que la lista enlazada.
A continuación, compruebe la función push y pop.
public class FixedCapacityStackOfStrings
{
private String[] s;
private int N=0;
public FixedCapacityStackOfStrings(int capacity)
{ s = new String[capacity];}
public boolean isEmpty()
{ return N == 0;}
public void push(String item)
{ s[N++] = item; }
public String pop()
{
String item = s[--N];
s[N] = null;
return item;
}
}
Sí, hay una diferencia, en caso de x ++ (postincremento), el valor de x será utilizada en la expresión y x se incrementa en 1 después de la expresión se ha evaluado, por otro lado ++ x (preincremento), x + 1 se usará en la expresión. Tomemos un ejemplo:
public static void 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 1
System.out.println(k);
}
La pregunta ya está contestada, pero permítanme añadir por mi parte también.
En primer lugar ++ significa la subasta por uno y - significa decremento por uno.
Ahora x ++ significa Incremento x después de esta línea y ++ x significa Incremento x antes de esta línea.
Comprobar este Ejemplo
class Example {
public static void 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);
}
}
Se dará a la siguiente salida:
x=19 a=17
x=19 b=19
x=18 a=19
x=17 b=17
Esta respuesta sería aún mejor si va acompañada de unas pocas palabras de explicación. – Thom
Con i ++, se llama postincremento, y el valor se utiliza en cualquier contexto entonces incrementado; ++ i es preincremento incrementa el valor primero y luego lo usa en contexto.
Si no lo está utilizando en ningún contexto, no importa cuál sea su uso, pero la convención utiliza postincrement.
Al considerar lo que realmente hace la computadora ...
++ x: x la carga de la memoria, de la subasta, el uso, almacenar de nuevo a la memoria.
x ++: cargue x de la memoria, use, incremente, almacene 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í está 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.
En general, simplemente use x = x + 1. Es mucho más simple.
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:
int x = 1;
//would print 1 as first statement will x = x and then x will increase
int x = x++;
System.out.println(x);
Ahora vamos a ver ++x
:
int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);
En Java hay una diferencia entre x ++ y ++ x
++ x es una forma de prefijo: Incrementa la expresión de variables y luego usa el nuevo valor en la expresión.
Por ejemplo si se utiliza en 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 = 4
System.out.println(y); //It will print out '4'
System.out.println(x); //It will print out '4'
x ++ es una forma postfix: El valor de variables se utiliza por primera vez en la expresión y luego se incrementa después de la operación.
Por ejemplo si se utiliza en 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 = 4
System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4'
la esperanza que esto está claro. Correr y jugar con el código anterior debería ayudarlo a comprender.
- 1. ¿Hay alguna diferencia entre "Objeto [] x" y "Objeto x []"?
- 2. ¿Hay alguna diferencia entre `if bool (x)` y `if x` en Python?
- 3. Diferencia entre x: Clave y x: Nombre
- 4. ¿Cuál es la diferencia entre X = X ++; vs X ++ ;?
- 5. ¿Hay alguna diferencia entre readonly y {get; }
- 6. diferencia entre UNHEX y X (MySQL)
- 7. Diferencia entre "importar X" y "de X import *"?
- 8. estilos WPF: diferencia entre x: Nombre y x: Tipo
- 9. C: diferencia entre (int) x y floor (x)?
- 10. ¿Cuál es la diferencia entre x ++ y ++ x
- 11. grupos de Java Matcher: Entender la diferencia entre "(?: X | Y)" y "(: X?) | (:? Y)"
- 12. ¿Cuál es la diferencia en R entre idéntico (x, y) e isTRUE (all.equal (x, y))?
- 13. ¿Hay alguna diferencia entre comillas simples y dobles en Java?
- 14. ¿Hay alguna diferencia entre! == y! = En PHP?
- 15. ¿Hay alguna diferencia entre utilizar este puntero y no usarlo?
- 16. ¿Diferencia en la construcción del objeto usando "X x (42)" y "X x = 42"?
- 17. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 18. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 19. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 20. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 21. ¿Hay alguna diferencia entre CPython y Python
- 22. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 23. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 24. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 25. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 26. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 27. ¿Hay alguna diferencia entre .NET y ASP.NET
- 28. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 29. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 30. ¿Math.IEEERemainder (x, y) es equivalente a x% y?
Cue un torrente de respuestas idénticas ... – skaffman
... y la votación ascendente de la primera de las respuestas idénticas para obtener en ... – skaffman
a la más rápida vaya al botín, ordene por el más antiguo, haga clic en el voto activo. ohowoho. – dotjoe