Avatar ·

¿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! <<>>

Característica del lenguaje: conversión implícita