Porquê os operadores de atribuição e unários fazem cast implicito?

Porquê quando escrevo esse código abaixo ele funciona quando deveria dar erro? Gostaria muito de saber o processo por trás do casting. Se alguém tiver algum material ou link que explique sobre o assunto ficarei muito grato! Desde já agradeço!

public static void main(String[] args) {
    int a = 5;
    int b = 4;
    
    byte c = 0;
    
    c += a + b;
    System.out.println(c);
    
}
1 curtida

Veja aqui: Narrowing Primitive Conversion

Se você receber a referencia do valor a + b de um tipo ele não compila. Como você está somando o resultado do C e recebendo uma Soma de um valor aí ele consegue. Ou seja, toda referencia de objeto de um tipo que você recebe é hora que pode dar o erro. entendeu?

Nesse caso, o compilador inclui o casting de maneira implícita quando se usa os operadores +=, -=, *=, etc.