Para fazermos escolhas na linguagem Java, usamos o comando switch que irá comparar um valor a um grupo de casos e executar um trecho para um caso específico quando o retorno da comparação é verdadeira.

Os comandos de escolha bem como o seus funcionamentos já foram discutidos em Portugol: Comando de Escolha sendo a leitura recomendada.

O comando switch utiliza outro comando, o comando break para interromper a execução do comando switch. Para ver como funciona o comando break visite Java Comandos: Comando Break.

Para fazermos escolhas em Java, utilizamos o comando switch que possui sua sintaxe apresentada abaixo. O comando switch utiliza o comando break como parte de sua sintaxe.

Fig. 1: Comando switch
Sintaxe
switch(condicao)
{
	case caso1: 
	//seu codigo aqui
	break;
	case caso2: 
	//seu codigo aqui
	break;
	default:
	//seu codigo aqui
	break;
}

O caso default é opcional. Com esse caso, podemos executar algum trecho de código caso o valor não seja igual a algum dos valores da cláusula case.

Exemplo 1
public class Main
{
	public static void main(String[] args) 
	{
	    
        int a = 2;
           
        switch(a){
            case 0 : System.out.println("UM"); break;
            case 1 : System.out.println("DOIS"); break;
            default : System.out.println("invalido"); break;
        }
	}
}
Saída
invalido

Java permite que strings sejam utilizadass nos cases do comando switch, não limitando-se apenas ao tipo int como mostrado acima.

Exemplo 2
public class Main
{
	public static void main(String[] args) 
	{
	    
        String a="teste0";
           
        switch(a){
            case "teste0" : System.out.println("teste0"); break;
            case "teste1" : System.out.println("teste1"); break;
            case "teste2" : System.out.println("teste2"); break;
            default : System.out.println("invalido"); break;
        }
	}
}
Saída
teste0

Java, assim como C/C++, permite que o switch seja utilizando em conjunto com enumeradores. O tipo de dado enum pode ser visto em Java Básico: Enum.

Exemplo 3
public class Main
{
    enum opcoes{
        UM,
        DOIS
    };
    
	public static void main(String[] args){
        opcoes a = opcoes.UM;
           
        switch(a){
            case UM : System.out.println("UM"); break;
            case DOIS : System.out.println("DOIS"); break;
            default : System.out.println("invalido"); break;
        }
	}
}
Saída
UM

Para a execução de um mesmo trecho de código para mais de uma caso, basta adicionar as cláusulas case em sequência ou um abaixo do outra separadas por (:).

Exemplo 3
public class Main
{
    enum opcoes 
    {
        UM,
        DOIS
    };
    
	public static void main(String[] args) 
	{
        opcoes a = opcoes.UM;
           
        switch(a){
            case UM : 
            case DOIS : System.out.println("UM ou DOIS"); break;
            default : System.out.println("invalido"); break;
        }
	}
}
Saída
UM ou DOIS

Podemos utilizar uma constante final como valor para comparação da cláusula case do comando switch. Isso pode ser observado no exemplo abaixo:

Exemplo 4
public class Main
{

	public static void main(String[] args) {
		
        String letra = "B";
        final String _var = "B";
        
        switch (letra) {
            case "A" -> System.out.println("A");
            case _var -> System.out.println("B"); //uso de constante em case
            default -> System.out.println("invalido");
        };
	}
}
Saída
B

Com o pattern match podemos checar ou testar tipos de dados para determinar se possuem uma característica e executar um trecho de código ou retornar um valor/expressão.

O pattern match suporta expressões, objetos, valores nulos, intervalo de dados entre outros usos mais complexos.

Exemplo 5
public class Main
{

	public static void main(String[] args) {
		
        Object valor = null; //100 //1.99f

        switch (valor) {
            case null -> System.out.println("objeto nulo");
            case Integer oi -> System.out.println("int");
            case Float of -> System.out.println("float");
            default -> System.out.println("invalido");
        };
	}
}
Saída
objeto nulo

Utilizando os operadores relacionais podemos declarar expressões para verificação de intervalo de dados ou também outros tipos de validação. A cláusula when é utilizada como parte de expressão.

Sintaxe
argumento when expressao
Exemplo 6
public class Main
{

	public static void main(String[] args) {
		
        Object valor = 4;

        switch (valor) {
            case Integer vl when vl >=1 && vl <= 5 -> System.out.println("intervalo valido");
            case String str when str.length() > 0 -> System.out.println("string valida");
            default -> System.out.println("valor invalido");
        };
	}
}
Saída
intervalo válido

Com pattern match podem retornar um valor ou resultado de uma expressão nos cases do switch substituindo assim o comando return. A sintaxe é mostrada abaixo:

Sintaxe
nome_variavel = switch (...) {
   case <expressao> -> expressao_retorno;
   //omitido
}
Exemplo 7
public class Main
{

	public static void main(String[] args) {
		
        Object valor = 4;

        Object ret = switch (valor) {
            case Integer i -> i.toString();
            case String s -> s.length();
            default -> -1;
        };
        
        System.out.println(ret);
	}
}
Saída
4
  1. 29/11/2025 - revisão 5 - Adição: switch; case com constante, pattern match, intervalo de dados e retornando valor
  2. 23/07/2025 - revisão 4 - correção em target de links; ajustes pontuais
  3. 23/09/2024 - revisão 3 - remoção de import em exemplos; ajustes gramaticais e outros
  4. 02/09/2024 - revisão 2 - Correção em link de objeto: múltiplos cases
  5. 06/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  6. 04/09/2023 - versão inicial