Diferencia entre x++ y x=x+1 en Java

En x++, aumenta el valor de x en 1 y en x=x+1 también aumenta el valor de x en 1. Pero la cuestión es que ambos son iguales o hay alguna diferencia entre ellos. Debemos ser conscientes del hecho de que cada vez que intentamos aplicar cualquier operador aritmético entre dos variables ayb, el tipo de resultado siempre es max (int, tipo de a, tipo de b). Veamos ahora la diferencia entre ambos:

  1. Tipo interno de conversión de datos: En el siguiente ejemplo, estamos haciendo una operación aritmética, es decir, la suma de b y 1. Aquí b es de tipo byte y 1 es de tipo int. Por lo tanto, el resultado debe ser de tipo int, es decir, max(int,tipo de b, es decir, byte,tipo de 1, es decir, int). Estamos asignando el tipo int al tipo de byte en el programa anterior, por eso estamos recibiendo un error de tiempo de compilación que dice «posible pérdida de precisión». Aquí se requiere encasillar para realizar la suma.

    Usando x = x + 1

    // Java program to illustrate
    // how arithmetic operations performed
    // depends on data types
    public class Test 
    {
        public static void main(String[] args)
        {
            byte b = 10;
              
            // Using b = b+1
            b = b + 1;
            System.out.println(b);
              
            /* Using typecasting will work
            b=(byte)b+1;
            System.out.println(b);*/
        }
    }

    Producción:

    error: incompatible types: possible lossy conversion from int to byte
    

    Usando Typecasting, la salida será

    11

    Usando x++

    En el siguiente ejemplo, estamos haciendo un incremento pero internamente estamos haciendo una operación como b++. El resultado debe ser de tipo int, es decir, max (int, tipo de b, es decir, byte, tipo de 1, es decir, int) y obtenemos el resultado como 11 porque el compilador realiza el encasillamiento implícito como byte b = (byte) (b + 1) ) aquí.

    // Java program to understand the 
    // operations of ++ operator
    public class Test 
    {
        public static void main(String[] args)
        {
        byte b = 10;
        b++;
        System.out.println(b);
        }
    }

    Producción:

    11
    

    Del ejemplo anterior podemos entender que en el compilador del operador de incremento/decremento se realiza automáticamente la conversión de tipo cuando sea necesario. Pero, ¿cómo sucede esto? Tratemos de entender:
    supongamos que tenemos que realizar un incremento y luego usamos el operador ++:

    i++;

    es solo un atajo para:

    i = i + 1;

    Pero, ¿y si tomamos valores para i y j así:

    byte i = 1;
    Then i = i + 1;

    no se compilará porque estamos asignando un valor int al tipo de byte y no hay encasillamiento en esa declaración, pero i++; compilará bien.
    Significa que de hecho i++; es un atajo para algo como esto

    i = (type of i)(i + 1);
  2. Instrucciones de compilación diferentes para ambos: son operadores diferentes y usan instrucciones JVM diferentes en código de bytes.
    x + 1 uses iadd instruction, 
    whereas x++ uses iinc instruction internally

    Aunque esto depende del compilador. Un compilador es libre de usar un conjunto diferente de instrucciones para una operación en particular.

Este artículo es una contribución de Bishal Kumar Dubey . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *