Avatar ·

Por que os operadores de atribuição compostos +=, -=, *= em Java não exigem conversão explícita de tipos?

Olá a todos! Comecei a estudar Java recentemente e me deparei com um comportamento estranho. Suponha que eu tenha o código: ```java int a = 5; long b = 10L; a = a + b; // Erro de compilação: incompatible types: possible lossy conversion from long to int ``` Aqui tudo é lógico — o Java exige uma conversão explícita, porque `long` pode ser maior que `int`. Mas se eu usar o operador composto: ```java int a = 5; long b = 10L; a += b; // Funciona sem erros! ``` Por que isso acontece? Afinal, pela lógica, `a += b` é o mesmo que `a = a + b`. Mas o compilador aceita a segunda opção sem conversão, embora os tipos sejam os mesmos. Isso me confunde, porque eu pensava que o Java é rigoroso com tipos. Expliquem, por favor, qual é o truque aqui? Existem situações onde isso pode levar a perda de dados ou bugs? <<>>

Por que os operadores de atribuição compostos não exigem cast?

Você está certo — à primeira vista, parece uma violação da tipagem forte. Na verdade, tudo está na especificação da linguagem Java.