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.