Porque isso aqui compila ?! [RESOLVIDO]


  static byte m1() {
    final char c1 = '\u0001';
    return c1;                                // 1
  }

Um byte tem 8 bits e um char tem 16 bits … A Keity disse o seguinte: Qualquer retorno que puder ser implicitamente
convertido ou qualquer retorno que puder ser explicitamente convertido, eu não preciso de um cast para isso…

Como se explica issO?!

Grato…

Experimente compilar isto:

 static byte m1() {  
   final char c1 = '\u0100';  
   return c1;                                // 0x0100 = 256, maior que 1 byte
 } 

Bom, não entendi… Continuo na dúvida…

A idéia é a seguinte: normalmente, você teria de retornar um valor compatível (no caso de byte, você teria de retornar um byte, certo)?

Só que quando o valor é constante, em determinadas condições. que são as que você estudou no livro, é possível passar um valor que seria incompatível (char > byte, certo?) mas como o valor é constante e cabe no retorno, excepcionalmente ele deixa usar.

É por isso que “return ‘\u0001’;” (um char que cabe direitinho em um byte) compila mas “return ‘\u0100’;” (um valor que passou de 1 byte) não compila.

O valor é final. Então o compilador tem certeza de que o conteúdo do char vale 1.
Se vale 1, cabe num byte, e não precisa ser feito nenhum cast.

O entanglement mostrou uma situação que o compilador sabe que vale mais do que 255, e então exige o cast.

aGORA SIM !! HEHE

VLW GALERA !