Atribuições byte e int

Pessoal, estava estudando aqui e me deparei com uma dúvida na parte de Atribuições…

Esse código é válido:

pq implicitamente o compilador compacta o valor automaticamente para caber na variável:

Dito isso, vejam esse código:

[code] byte a = 3
byte b = 4

byte c = a+b[/code]

Isso dá erro: e pede pra fazer o cast para byte explicitamente

pq em uma situação ele faz o cast automaticamente e no outro não?

Porque 30 cabe num byte

sim, mas quando passo o valor 30 pro byte não da erro, e sim quando passo a expressão a+b, que resulta em 7

Porque 30 sempre cabe num byte, mas a + b nem sempre cabe num byte.

Agora sim, entendi. É uma forma de se prevenir, já que nao da pra saber qual será o valor de a nem b

Sim, por exemplo se a ou b fosse um parâmetro do método

A soma de dois byte (a + b) gera um int, a soma de dois short também vai gerar um int.
por isso o compilador reclama que precisa fazer um cast.

Abraço

olá,

De acordo com o post acima, é realmente isso que ele faz.

Toda operação entre numeros inteiros retorna sempre um int.

Assim como para numeros de ponto flutuante o valor padrão é double.

Espero ter ajudado

ricardo

Exatamente.

Quando usamos NÚMEROS LITERAIS (DIGITADOS “NA UNHA”), rrsrs… o compilador consegue ver se o número CABE na variável, ou seja:

byte b = 100; // Ok - 100 é menor que 127, portanto não precisa de Cast,

Só que, se eu fizesse isso:

byte b = 3550; // Não vai compilar, CAST EXPLÍCITO é necessário por que 3550 é maior que 127, portanto o compilador sabe que haverá uma possível perda de precisão e deve te alertar sobre isso.

Quando usamos variáveis, o compilador (em tempo de compilação, claro) NÃO TEM CONDIÇÕES DE SABER O VALOR DA VARIÁVEL, portanto ELE SEMPRE VAI LHE SOLICITAR CAST.

A mesma regra se aplica a todos os outros tipos primitivos.

Grande abraço,
Rodrigo.