Avatar ·

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

Característica da linguagem: cast implícito