Avatar ·

¿Por qué los operadores de asignación compuesta +=, -=, *= en Java no requieren conversión de tipo explícita?

¡Hola a todos! Empecé a estudiar Java recientemente y me encontré con un comportamiento que no entiendo. Supongamos que tengo este código: ```java int a = 5; long b = 10L; a = a + b; // Error de compilación: incompatible types: possible lossy conversion from long to int ``` Aquí todo es lógico — Java requiere una conversión explícita porque `long` puede ser más grande que `int`. Pero si uso el operador compuesto: ```java int a = 5; long b = 10L; a += b; // ¡Funciona sin errores! ``` ¿Por qué pasa esto? Porque según la lógica, `a += b` es lo mismo que `a = a + b`. Pero el compilador acepta la segunda opción sin conversión, aunque los tipos son los mismos. Esto me confunde, porque pensaba que Java controla estrictamente los tipos. Expliquen, por favor, ¿cuál es el truco aquí? ¿Hay situaciones donde esto pueda causar pérdida de datos o bugs? <<>>

¿Por qué los operadores de asignación compuesta no requieren cast?

Tienes razón — a primera vista parece una violación de la tipificación estricta. En realidad, todo está en la especificación del lenguaje Java.