Diferencia entre asignación simple y compuesta en Java

Muchos programadores creen que la declaración «x += i» es simplemente una forma abreviada de «x = x + i». Esto no es del todo cierto. Ambas declaraciones son expresiones de asignación. La segunda declaración usa el operador de asignación simple (=), mientras que la primera usa un operador de asignación compuesto. Los operadores de asignación compuesta son +=, -=, *=, /=, %= etc.
La especificación del lenguaje Java dice que la asignación compuesta E1 op= E2 es equivalente a la asignación simple,
E1 = (T) ((E1) op (E2)), donde T es el tipo de E1.
En otras palabras, las expresiones de asignación compuestas proyectan automáticamente el resultado del cálculo que realizan al tipo de la variable en su lado izquierdo. Si el tipo del resultado es idéntico al tipo de la variable, la conversión no tiene efecto. Sin embargo, si el tipo del resultado es más amplio que el de la variable, el operador de asignación compuesta realiza una conversión primitiva de reducción silenciosa. Intentar realizar la asignación simple equivalente generaría un error de compilación.

Considere los siguientes ejemplos:

// A Java program that uses compound assignment
// for different types.
class GFG{
    public static void main(String s[]) {
    short x = 0;
    int i = 123456;
    x += i;  // Casts result to short
    System.out.println(x);
  }
}

Producción:

-7616

Puede esperar que el valor de x sea 123456 después de que se ejecute esta declaración, pero no lo es; es -7616. El valor int 123456 es demasiado grande para caber en un resumen. El reparto generado automáticamente. Elimina silenciosamente los dos bytes de orden superior del valor int.

// A Java program that uses simple addition
// for different types.
class GFG{
  public static void main(String s[]) {
    short x = 0;
    int i = 123456;
    x = x + i; // Causes compilation error
    System.out.println(x);
  }
}

Producción:

prog.java:5: error: incompatible types: possible 
lossy conversion from int to short
x = x + i;
    ^

Está claro a partir de los ejemplos anteriores que las expresiones de asignación compuestas pueden causar resultados no deseados y deben usarse con cuidado para tipos como byte, short o char. Si las utilizamos, debemos asegurarnos de que el tipo de expresión de la derecha no sea de mayor precisión.

Este artículo es una contribución de Shubham Juneja . 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 *