¿Hay alguna diferencia entre x++ y ++x en Java?

3 minutos de lectura

¿Hay alguna diferencia entre x y x en Java
erickreutz

¿Hay alguna diferencia entre ++x y x++ en Java?

++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

++x incrementa el valor de x y luego devuelve x
x++ devuelve el valor de x y luego incrementa

ejemplo:

x=0;
a=++x;
b=x++;

después de ejecutar el código, tanto a como b serán 1 pero x será 2.

1646745908 760 ¿Hay alguna diferencia entre x y x en Java
pablojim

Estos se conocen como operadores de postfijo 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 suffix?

    – hiper-neutrino

    1 de junio de 2015 a las 1:41

Sí,

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

imprimirá 6 y

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

imprimirá 5.

1646745909 408 ¿Hay alguna diferencia entre x y x en Java
Alberto

Aterricé aquí desde uno de sus dups 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 usted javac esta Y.java clase:

public class Y {
    public static void main(String []args) {
        int y = 2;
        y = y++;
    }
}

y javap -c Yobtienes el siguiente código jvm (me he permitido comentar el método principal con la ayuda del Especificación de máquina virtual Java):

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

}

Así, finalmente tenemos:

0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp

1646745909 363 ¿Hay alguna diferencia entre x y x en Java
Cornell

Al considerar lo que la computadora realmente hace…

++x: carga x desde la memoria, incrementa, usa, almacena 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)

Serán 2 (o 1)

Y ahí radica el problema. ¿Pasó el autor del compilador el parámetro después de la recuperación, después del uso o después del almacenamiento?

Generalmente, solo usa x = x + 1. Es mucho más simple.

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:

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 de postfijo:
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 = 4

System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4' 

Espero que esto esté claro. Ejecutar y jugar con el código anterior debería ayudarlo a comprender.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad