La selezione multipla in Java (IF - ELSEIF e SWITCH)

Se l'algoritmo realizzato per la soluzione di un problema presentasse la situazione mostrata nella figura seguente, ossia tante selezioni doppie annidate, ognuna nel ramo falso del blocco di selezione precedente, la traduzione in Java potrebbe essere quella canonica, derivante dalla traduzione di ogni singolo blocco, oppure quella sintetica evidenziata negli esempi di codice che seguono.

Selezione doppia annidata
// selezioni doppie annidate
// nel ramo falso della selezione precedente                    
if (<cond1>) {
    // sequenza di istruzioni
} else {
    if (<cond2>) {
        // sequenza di istruzioni
    } else {
        if (<cond3>) {
            // sequenza di istruzioni
        } else {
            ...
            if (<condN>) {
                // sequenza di istruzioni
            } else {
                // sequenza di istruzioni
            }
        }
    }
}
Questa situazione può essere tradotta, in Java, in una forma sintetica, utilizzando il blocco

if - else if - else if - ... else

come mostrato nel codice seguente.

if (<cond1>) {
    // sequenza di istruzioni
} else if (<cond2>) {
    // sequenza di istruzioni
} else if (<cond3>) {
    // sequenza di istruzioni
} ...
else if (<condN>) {
    // sequenza di istruzioni
} else {
    // sequenza di istruzioni
}
Se tutte le condizioni delle selezioni fossero del tipo variabile = valore (numerico/carattere/alfanumerico) e la variabile fosse sempre la stessa, come mostrato nel frammento di codice che segue, si potrebbe utilizzare, al posto delle istruzioni if - elseif, la selezione multipla o blocco switch.
if (variabile = <valore1>) { // condizione di uguaglianza
    // sequenza di istruzioni
} else if (variabile = <valore2>) { // stessa condizione, ma valore diverso
    // sequenza di istruzioni
} else if (variabile = <valore3>) { // stessa condizione, ma valore diverso
    // sequenza di istruzioni
} ...
else if (variabile = <valoreN>) { // stessa condizione, ma valore diverso
    // sequenza di istruzioni
} else { // nessuna delle condizioni precedenti
    // sequenza di istruzioni
}
L'istruzione switch che implementerebbe in modo equivalente il codice sopra è la seguente:
switch (variabile) {
    case <valore1>: 
        // sequenza di istruzioni
        break;
    case <valore2>:
        // sequenza di istruzioni
        break;
    case <valore3>:
        // sequenza di istruzioni
        break;
    ...
    case <valoreN>:
        // sequenza di istruzioni
        break;
    default: // ramo else, opzionale, 
             // eseguito se la variabile non 
             // contiene nessuno dei valori 
             // specificati nei blocchi case 
             // precedenti
        // sequenza di istruzioni
}
Si può immediatamente notare la maggiore semplicità e leggibilità del codice risultante.

L'itruzione break, utilizzata al termine di ogni ramo case, è utilizzata per far saltare l'esecuzione alla prima istruzione che segue il blocco switch, altrimenti essa proseguirebbe dal case che soddisfa la condizione a quelli seguenti, non traducendo, di fatto, la stessa situazione del blocco if - elseif mostrato in precedenza.

L'ultimo case, oppure il blocco default, se presente, possono non utilizzare l'istruzione break, in quanto non sono seguiti da ulteriori blocchi case.

Come già evidenziato, il blocco default è opzionale, ma, se presente, deve essere l'ultimo blocco del costrutto switch.

Nota:
L'istruzione break può anche essere utilizzata in ciascuno dei blocchi di iterazione visti in precedenza (iterazioni determinate e indeterminate).
La sua esecuzione ha come effetto l'interruzione dell'iterazione ed il trasferimento del controllo all'istruzione che segue il ciclo in cui essa è inserita.