Por que em Java os operadores de atribuição compostos (+=, -=, *=) não exigem cast explícito?
Olá a todos! Comecei a estudar Java recentemente e me deparei com um comportamento que não entendo. Quando escrevo uma atribuição normal, por exemplo:
int a = 5;
a = a + 3.5; // Erro de compilação: perda de precisão
O compilador reclama que não é possível atribuir double a int sem um cast explícito. Isso é lógico. Mas se eu usar o operador composto +=:
int a = 5;
a += 3.5; // Funciona! Resultado 8
Aqui fico confuso. Por que no segundo caso o compilador não exige cast? Afinal, o resultado da soma de int e double é double, e estamos perdendo precisão ao atribuir a int. Em teoria, deveria ser como no primeiro exemplo — um erro.
Por que isso acontece? É uma característica da linguagem ou estou perdendo algo? Quais são as armadilhas ao usar esses operadores? Por exemplo, o que acontece se eu escrever:
short s = 1;
s += 1; // Funciona?
Ou:
byte b = 127;
b += 1; // O que acontece aqui?
Agradeço por uma explicação detalhada, de preferência com exemplos. Desde já, obrigado!
<<>>