Publicidade



INC - Long Switch?

Uma 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:

  • YACP - Variáveis e Tipos Primitivos
  • Benchmark TreeSet x HashSet
  • Dia C - Modificadores e extensões GNUC
  • Assine nosso RSS feed!


    2 Responses to “INC - Long Switch?”

    1. 1 Luiz

      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!

    2. 2 Jonas Abreu

      Olá Luiz,

      que bom que meus posts ajudaram um pouco ;).

      Quanto ao enum eu realmente tinha esquecido dele. Obrigado pelo aviso!

    Leave a Reply