La sentencia switch permite la ejecución de un determinado bloque de código según el valor que tome una variable o expresión que se indique.

El formato de utilización es el siguiente:

switch(expresión) {
   case valorLiteral1:
      BloqueSentencias1;
      break;
   case valorLiteral2:
      BloqueSentencias2;
      break;
   case valorLiteralN:
      BloqueSentenciasN;
      break;
   default:
      BloqueSentenciasDefault;
}  

La secuencia de ejecución es la siguiente:

  1. Obtener el resultado de la expresión.
  2. Comparar el resultado obtenido con valorLiteral1.
    • Si son iguales:
      • Ejecutar BloqueSentencias1.
      • Saltar al paso 5.
  3. Comparar el resultado obtenido con valorLiteral2.
    • Si son iguales:
      • Ejecutar BloqueSentencias2.
      • Saltar al paso 5.
  4. Comparar el resultado obtenido con valorLiteralN.
    • Si son iguales:
      • Ejecutar BloqueSentenciasN.
      • Saltar al paso 5.
    • En caso contrario:
      • Ejecutar BloqueSentenciasDefault.
  5. Continuar con la ejecución del programa.

Hay que tener en cuenta que el resultado de la expresión debe ser uno de los tipos de datos básicos (byte, short, int, long float, double, char y boolean), por lo que no se puede utilizar, por ejemplo, con cadenas de caracteres String. 

Ejemplo de uso para obtener el nombre del día de la semana según el número de orden del día de la semana (1 a 7):

String textoDíaSemana;
 
//Obtener el número de día de la semana escrito por el usuario
int numDía = Integer.valueOf(campoDía.getText());
 
switch(numDía) {
	case 1:
		textoDíaSemana = "Lunes";
		break;
	case 2:
		textoDíaSemana = "Martes";
		break;
	case 3:
		textoDíaSemana = "Miércoles";
		break;
	case 4:
		textoDíaSemana = "Jueves";
		break;
	case 5:
		textoDíaSemana = "Viernes";
		break;
	case 6:
		textoDíaSemana = "Sábado";
		break;
	case 7:
		textoDíaSemana = "Domingo";
		break;
	default:
		textoDíaSemana = "Incorrecto";
}

La instrucción break; impide que, tras ejecutar las sentencias de un determinado bloque, se ejecuten seguidamente las sentencias del bloque siguiente.

Por ejemplo, observemos el siguiente trozo de código:

int num = 1;
switch(letra) {
	case 'A':
		num += 1;
	case 'B':
		num += 2;
		break;
	case 'C':
		num += 3;
}

En ese ejemplo, si la letra es 'A' el resultado de num es 4, porque se inicializa al valor 1, al coincidir la letra con 'A' se le suma 1 y al no encontrase un break continúa sumándole 2. En cambio, si la letra es 'B', el resultado de num es 3, ya que parte del valor 1 y sólo se le suma 2, no sumándole el 3 de la letra 'C' por encontrar un break.

Si se desea que un mismo bloque de código se ejecute para varios valores literales, se utilizará un case para cada valor, escribiendo el bloque de código detrás del último case:

switch(letra) {
	case 'a':
	case 'e':
	case 'i':
	case 'o':
	case 'u':
		textoMensaje = "Vocal minúscula";
		break;
	case 'A':
	case 'E':
	case 'I':
	case 'O':
	case 'U':
		textoMensaje = "Vocal mayúscula";
}

Hay que destacar que la sección del valor default es opcional, como se ha podido ver también en los ejemplos anteriores.