¿Por qué en Java los operadores de asignación compuesta (+=, -=, *=) no requieren conversión de tipo explícita?
¡Hola a todos! Acabo de empezar a aprender Java y me encontré con un comportamiento que no entiendo. Cuando escribo una asignación normal, por ejemplo:
int a = 5;
a = a + 3.5; // Error de compilación: pérdida de precisión
El compilador se queja de que no se puede asignar un double a un int sin una conversión explícita. Eso es lógico. Pero si uso el operador compuesto +=:
int a = 5;
a += 3.5; // ¡Funciona! Resultado 8
Aquí estoy confundido. ¿Por qué en el segundo caso el compilador no requiere un cast? Después de todo, el resultado de sumar un int y un double es un double, y lo estamos perdiendo al asignarlo a un int. En teoría, debería ser como en el primer ejemplo: un error.
¿Por qué es así? ¿Es una característica del lenguaje o me estoy perdiendo algo? ¿Cuáles son los posibles problemas al usar estos operadores? Por ejemplo, ¿qué pasará si escribo:
short s = 1;
s += 1; // ¿Funcionará?
O:
byte b = 127;
b += 1; // ¿Qué ocurrirá aquí?
Agradecería una explicación detallada, preferiblemente con ejemplos. ¡Gracias de antemano!
<<>>