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 - elseif - elseif - ... else

come mostrato nel codice seguente.

if (<cond1>) {
    // sequenza di istruzioni
} elseif (<cond2>) {
    // sequenza di istruzioni
} elseif (<cond3>) {
    // sequenza di istruzioni
} ...
elseif (<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
} elseif (variabile = <valore2>) { // stessa condizione, ma valore diverso
    // sequenza di istruzioni
} elseif (variabile = <valore3>) { // stessa condizione, ma valore diverso
    // sequenza di istruzioni
} ...
elseif (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 trasferire l'esecuzione all'istruzione che segue lo switch, altrimenti essa proseguirebbe da un case a quello seguente, 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.

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 ognuno dei blocchi di iterazione visti in precedenza (determinati e indeterminati).
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.