Switch case com string

é possivél fazer um switch case com string?

http://www.guj.com.br/posts/list/16759.java

http://javafree.uol.com.br/artigo/849908/Maneiras-de-fazer-Switch-em-uma-variavel-String.html

Serve?

 String nome = "Vitor";  
     switch (nome.hashcode()) {  
       case "Vitor".hashCode() : System.out.println("Valor de nome é Vitor");  
       break;   
       case "Paulo".hashCode() : System.out.println("Valor de nome é Paulo");  
       break;   
       default: System.out.println("Default");  
     }
1 curtida

Vlw Henrique muito obrigado

tá dando o seguinte erro:

constant expression required

[quote=Algebra]tá dando o seguinte erro:

constant expression required[/quote]

Não é correto utilizar o hashCode() por que o valor do código de hash irá depender do valor da String, e isso não é constante.
Tente utilizar algum literal nos case’s. Ou alguma constante (primitivo declarado com modificador final).

Só a partir do Java 7.
http://blogs.sun.com/darcy/entry/project_coin_strings_in_switch
http://blogs.sun.com/darcy/entry/project_coin_string_switch_anatomy
http://blogs.sun.com/darcy/entry/project_coin_final_five

Cara, da de fazer um codigo dinamico usando hashmap…feio…mais pode te servir…

HashMap<String, Integer> caseHash = new HashMap<String, Integer>();
		
		caseHash.put("testeA", 1);
		caseHash.put("testeB", 2);
		caseHash.put("testeC", 3);
		
		String tuaChave = "teste";
		

		switch (caseHash.containsKey(tuaChave) ? caseHash.get(tuaChave) : -1) {
		case 1: {
			break;
		}
		case 2: {
			break;
		}
		case 3: {
			break;
		}
		default:{
			
		}
		}

por favor thingol…não me mate :frowning:

Usa um Enum

Vlws Thingol !

O aconselhavel eh usar constantes , ou Enun .

Lembrando que a maioria dos lugares ainda esta em java 5
sem falar nas inúmeras empresas que usam 1.4.

Atenção: switch em strings só funciona a partir do Java 7.

class TesteSwitch {
    public static void main (String[] args) {
        String s = "desprezível";
        switch (s) {
        case "desprezível":
            System.out.println ("despicable"); break;
        case "auréola":
            System.out.println ("halo"); break;
        case "fungo":
            System.out.println ("fungus"); break;
        case "fujão":
            System.out.println ("fugitive"); break;
        case "abstruso":
            System.out.println ("abstruse"); break;
        }
    }
}

Isto foi compilado para o equivalente a (eu olhei os bytecodes, com auxílio do “javap”, para ver o que o compilador gerou):

class TesteSwitch {
    public static void main (String[] args) {
        String s = "desprezível";
        int hashCode = s.hashCode();
        int i = -1;
        switch (hashCode) {
        case -644512679: if (s.equals ("auréola")) i = 1; else if (s.equals("desprezível") i = 0; break;
        case 97793703: if (s.equals ("fujão") i = 3; else if (s.equals("fungo") i = 2; break; 
        case 1732918561: if (s.equals ("abstruso") i = 4; break;
        default: break;
        }
        switch (i) {
        case 0: System.out.println ("despicable"); break;
        case 1: System.out.println ("halo"); break;
        case 2: System.out.println ("fungus"); break;
        case 3: System.out.println ("fugitive"); break;
        case 4: System.out.println ("abstruse"); break;
        }
    }
}

Diretamente não! Voce pode usar strings indiretamente como nos exemplos acima ou utilizar os mais recomendados: os Enuns.
Lembrando que enuns NÃO são strings.

vlw pelas dicas pessoal