Porque isso aqui compila ?! [RESOLVIDO]

5 respostas
Gustavo_Santos
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…

5 Respostas

E

Experimente compilar isto:

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

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

E

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.

ViniGodoy

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.

Gustavo_Santos

aGORA SIM !! HEHE

VLW GALERA !

Criado 3 de agosto de 2010
Ultima resposta 3 de ago. de 2010
Respostas 5
Participantes 3