Olá pessoal.
Alguém pode me ajudar a entender o porquê de a linha 8 não compilar?
Estou estudando o 3o. capítulo sobre atribuições de primitivos do livro K&B.
[code]public class Atribuicoes {
public static void main(String[] args) {
byte a = 1; // 1 é tratado como int pelo compilador mas não dá erro
byte b = 1; // idem a linha acima
// ao somar os dois bytes, o resultado é um int, e precisa de cast. porque?
// o compilador não deveria fazer o narrow?
byte c = a + b; // <= erro de compilação
}
}
[/code]
Obrigado
porque a soma de dois tipos bytes irá gerar um tipo int, neste caso para compilar será necessário um cast explicito para um tipo byte.
[quote=felipe.sales]porque a soma de dois tipos bytes irá gerar um tipo int, neste caso para compilar será necessário um cast explicito para um tipo byte.
[/quote]
Então Felipe, mas o literal 1 também é um int. E para o literal o compilador não reclama…
Será que posso assumir que a regra é:
- para literais a redução é feita de forma implícita
- para referências para tipos “maiores” é necessário cast.
São coisas simples que usamos no dia a dia, mas fico preocupado considerando a prova. 
Então, adolfo_eloy…
O que acontece é o seguinte o inteiro 1 cabe em um tipo byte, mas se tivesse inserido o inteiro 400, por exemplo, daria o erro que vc tava esperando. No caso da soma é mais ou menos assim: a soma de qualquer tipo que seja menor que um int vai gerar um int.
eu tbm to estudando pra SCJP e essas coisas são traiçoeiras msm…
Quando é LITERAL o compilador tem a certeza do que está acontecendo…
byte b = 1 + 1; // = 2. cabe no byte, faz o cast implicito..
byte b2 = 1 + 127; // = 128, não cabe no byte, erro de compilação..
agora…
byte b = 1;
byte x = 1;
byte r = b + x;
não se tratam mais de literal e sim de VARIÁVEIS…
está fora do contexto do compilador…
ele não sabe e nem quer saber o que está dentro das variáveis… se é um literal, se é um resultado de uma consulta no bd…
o que ele sabe é que o resultado da soma de 2 bytes é um inteiro, como esse inteiro não é um literal, exige o cast explicito…
Espero ter ajudado…
[]s
Caros muito obrigado pela ajuda.
Só lendo o livro K&B isso não tinha ficado tão claro.
tks