INC - Long Switch?
Published by Jonas Abreu March 17th, 2008 in Dicas, Java, ProgramacaoUma peculiaridade estranha do switch do java é que ele não funciona para o tipo long.
O switch funciona apenas para byte, short, char e int.
public class Teste {
public static void main(String []args){
long l = 10;
switch (l){
case 10: System.out.println("Isso não compila");
}
}
}
O código acima não compila. Isso acontece porque o switch espera um int (porque isso acontece já é outra história) e um long não pode ser convertido para int sem um cast, por causa da possível perda de precisão (afinal cabe muito mais coisa dentro de um long do que dentro de um int).
Todos os outros tipos podem ser promovidos para int sem nenhum problema (pois no int cabe mais do que em um byte, short ou char).
Em Java, T caber em O significa min(O) < min(T) e max(O) > max(T). Isso também vale para float e double, o que nos leva a montar a seguinte sequência de promoção automática:
char -> int
byte -> short -> int -> long -> float -> double
O que parece estranho é o long usar 64 bits enquanto que o float usa só 32. Mas como obedecem à regra acima, a promoção é feita do mesmo jeito.
Posts Relacionados:
Assine nosso RSS feed!

Lembrando também que no java 5 constantes de um enum também podem ser usadas como argumento de um switch, o que NÃO quer dizer que uma constante de enum é um int. E as variáveis testadas em cada case precisam ser literais ou constantes (final ou enum).
Bom, aproveitando, fiz a prova de certificação (SCJP) recentemente e passei. Seus posts anteriores me ajudaram um pouco. Vlw!
Olá Luiz,
que bom que meus posts ajudaram um pouco ;).
Quanto ao enum eu realmente tinha esquecido dele. Obrigado pelo aviso!