Questao de Certificação

Pessoal tô com uma dúvida cruel,

 Alguém poderia me explicar porquê na questão 25 é impresso o valor 100, e na questão 26 é gerada uma exceção... pra mim, era pra serem geradas exceções em ambas as questões. Não seria necessário um cast explícito, tipo (int) i?

Q25.What will be the outcome of executing following code.

class MyClass
{
 public static void main(String []args)
 {
   final int i = 100;
   byte b = i;
   System.out.println(b);
 }
}

Will give compilation error
Will compile and print 100
Will throw an exception
SKIP THE QUESTION


Q26.What will be the outcome of executing following code.

class MyClass
{
  public static void main(String []args)
  {
   int i = 100;
   byte b = i;
   System.out.println(b);
  }
}

Will give compilation error
Will compile and print 100
Will throw an exception
SKIP THE QUESTION

[]'s Tone

Ei consertando:

    O cast seria  "(byte) i"

[]’ Tone

No primeiro caso, como a variável é final o compilador sabe q o valor da mesma será sempre 100…
Para ele seria como se vc fizesse: byte b = 100
Já no segundo caso, a variável pode ser alterada, e pode vir a conter um valor que seja maior que o byte…

Acho q é isso!!!

TedLoprao,

 Valeu, acho que é por aí mesmo a resposta.

[]'s Tone

E o que acontece se na declaracao da constante inteira for declarada maior que o Byte??

Rominhof,

    Aí é o mesmo que vc  passar um valor superior ao tamanho do byte diretamente:

       byte b = 257;

   O compilador vai se contorcer e estribuchar lançando uma exceção.

[]'s Tone