atribuição

Amigos,
Porque posso fazer a seguinte situação.
byte b = 3;
b += 7;
Já a seguinte dá perda de precisão.
byte c = 3;
c = c + 7;
Onde esta a explicação para isso.
Obrigado.

você ganha um “Type mismatch: cannot convert from int to byte”

byte c = 3;
c = (byte) (c + 7);

Para dar certo você vai precisar de um cast!

Agora, o porque da forma “b += 7” da certo, eu não sei explicar…

Quando vc dá

byte b;
b += 7;

vc não recebe type mismatch pq 7 cabe numa variável do tipo byte.

Qdo vc dá
byte c = 7;
c = c + 3;

A segunda linha gerou uma expressão aritmética, que em Java, sempre é int, e conseqüentemente, não cabe num byte, e o compilador reclama o type mismatch.

Mas venhamos, vc não quer que o compilador seja tão inteligente a ponto de gerar rotinas para descobrir o valor da variável (algs. vezes, em tempo de execução), pra saber se vai dar type mismatch, não é verdade?