Caso in Java spiegato: switch-case, break, fall-through e espressioni switch (Java 14+)

目次

1. Cosa Imparerai in Questo Articolo

Questo articolo spiega, in modo strutturato, i punti chiave che molte persone si chiedono quando cercano “java case” — dai principianti che stanno iniziando a imparare Java ai professionisti che scrivono Java quotidianamente.

In particolare, l’articolo è scritto per lettori che hanno domande come le seguenti.

  • Non sei sicuro di cosa significhi realmente case in un’istruzione switch
  • Vuoi capire cosa succede se non scrivi break e perché è necessario
  • Vuoi linee guida chiare per scegliere tra if-else e switch-case
  • Vuoi comprendere cos’è la switch expression (case ->) introdotta in Java 14+
  • Sei confuso perché “case” è usato anche per indicare maiuscole/minuscole (case-sensitive)

Questo tipo di confusione è qualcosa che quasi tutti incontrano almeno una volta mentre imparano Java.
In questo articolo non introdurremo solo la sintassi — spiegheremo anche:

  • perché Java è progettato in questo modo
  • dove si verificano comunemente gli errori
  • come pensarci nello sviluppo reale

Affronteremo anche queste prospettive.

1.1 Costruire una Comprensione Sistemica del “case” in Java

case è un etichetta di ramo usata all’interno di un’istruzione switch o di una switch expression.
Tuttavia, molti principianti tendono a cadere in situazioni come queste:

  • “Posso copiare la sintassi, ma non capisco come funziona.”
  • “Non riesco a spiegare perché break è necessario.”
  • “Il codice funziona, ma non sono sicuro che sia corretto.”

In questo articolo organizzeremo l’argomento nell’ordine sintassi → comportamento → insidie, così potrai passare da “usarlo vagamente” a “usarlo con comprensione”.

1.2 Concentrarsi sulle Insidie più Comuni per i Principianti

Alcuni degli errori più frequenti includono i seguenti.

  • Esecuzione non intenzionale dovuta all’omissione di break
  • Mancanza di valori imprevisti per non aver scritto default
  • Tentare di inserire una variabile in case e ottenere un errore
  • Rendere lo switch troppo lungo, compromettendo la leggibilità

Questi sono difficili da evitare se ti limiti a memorizzare la grammatica.
Questo articolo spiega perché accadono dal punto di vista della specifica del linguaggio.

1.3 Copre le Switch Expression Moderne (Java 14+)

Nelle versioni recenti di Java, oltre alla tradizionale istruzione switch, è possibile utilizzare anche una switch expression.

  • La nuova sintassi case value -> action
  • Perché break non è più necessario
  • Il vantaggio di restituire valori direttamente

Anche se conosci solo lo stile più vecchio o non sei sicuro delle differenze,
questo articolo è strutturato in modo da permetterti di confrontare entrambi gli stili e comprenderli.

1.4 Chiarisce anche un Altro Significato Spesso Confuso nelle Ricerche “java case”

La parola chiave di ricerca “java case” include spesso un’altra intenzione, come ad esempio:

  • Distinguere maiuscole/minuscole (case-sensitive)
  • Ignorare maiuscole/minuscole (case-insensitive)

Questi sono concetti diversi dallo switch-case, ma usano la stessa parola “case”, il che genera confusione.

Più avanti nell’articolo, organizzeremo questa differenza e spiegheremo
“perché il significato cambia a seconda del contesto” in modo semplice e chiaro.

1.5 Come Leggere Questo Articolo

Da qui in poi spiegheremo le cose nell’ordine seguente.

  • Il ruolo base di “case” in Java
  • La sintassi minima e il comportamento di switch-case
  • Come funzionano il fall‑through e break
  • Linee guida pratiche d’uso e pensiero progettuale
  • Come usare le switch expression
  • Domande frequenti (FAQ)

Gli esempi di codice sono mantenuti brevi e facili da capire,
così anche i principianti dovrebbero riuscire a seguirli senza difficoltà.

2. Cosa Significa “case” in Java (Conclusione Prima)

2.1 case è un “Segnaposto di Ramo” in un’Istruzione switch

In Java, case è un etichetta che indica dove il flusso di esecuzione deve ramificarsi all’interno di un’istruzione switch (o di una switch expression).
Uno switch è usato per “selezionare un comportamento basato su un valore”, e case definisce la destinazione per ciascun valore.

Per prima cosa, tieni a mente questo modello mentale più semplice:

  • switch : il punto di partenza per il controllo
  • case : un marcatore che significa “se il valore è questo, inizia l’esecuzione da qui”

Il punto chiave è che case di per sé non è un’espressione condizionale — è un’etichetta che segna un punto di corrispondenza.

2.2 Una dichiarazione switch “Inizia l’esecuzione dal case corrispondente”

Una dichiarazione switch funziona nel seguente flusso.

  1. L’espressione in switch (expression) viene valutata
  2. Viene confrontata con ogni valore case dall’alto verso il basso
  3. L’esecuzione inizia dal primo case corrispondente

Ciò che è importante qui è che non significa “solo il case corrispondente viene eseguito”.

Un case corrispondente è semplicemente un punto di partenza. Se non comprendi questo meccanismo, più tardi ti confonderai con il “fall‑through”.

2.3 case non è un ramo condizionale, ma un “ramo di valore”

Un fraintendimento comune tra i principianti è pensare:

case = una condizione if

Ma in realtà, i ruoli sono diversi:

  • if : valuta se una condizione è vera o falsa
  • case : verifica solo se il valore corrisponde

Per questo, case ha limitazioni come:

  • Non è possibile usare operatori di confronto ( > , < , >= , ecc.)
  • Non è possibile scrivere condizioni di intervallo
  • In linea di principio, è possibile specificare solo valori costanti

A causa di queste regole, switch-case è meglio descritto come una costruzione per organizzare rami con candidati predefiniti in modo leggibile.

2.4 default copre “Quando nessun case corrisponde”

default viene eseguito quando nessuno dei valori case corrisponde.

  • Quando il valore di input è inaspettato
  • Quando nuovi valori vengono aggiunti in seguito a causa di modifiche alle specifiche

Per prepararsi a queste situazioni, è buona pratica scrivere un default.

Specialmente nei progetti reali, inserire cose come:

  • logging
  • eccezioni
  • messaggi di errore

in default aiuta a prevenire codice che “fallisce silenziosamente”.

2.5 Riepilogo in una frase per capire case

In una frase, ciò che abbiamo coperto finora è questo:

In Java, un case è un’etichetta di ramo in una dichiarazione switch che dice: “Se il valore è questo, inizia l’esecuzione da qui”.

Con questa comprensione, concetti come break, fall‑through e le espressioni switch diventano molto più facili da afferrare.

3. Sintassi base di switch-case (Esempio minimale)

In questa sezione, confermeremo la sintassi più basilare di switch-case in Java e spiegheremo attentamente come il codice viene effettivamente eseguito.

Per ora, dimentica le specifiche dettagliate e l’uso avanzato. L’obiettivo è capire “come si scrive e come fluisce il controllo”.

3.1 Comprendere switch-case attraverso la forma più piccola funzionante

switch-case Java è scritto così:

int number = 2;

switch (number) {
    case 1:
        System.out.println("One");
        break;
    case 2:
        System.out.println("Two");
        break;
    default:
        System.out.println("Other");
}

Analizziamo il flusso passo per passo.

  1. switch (number) valuta il valore di number
  2. case 1 → non corrisponde
  3. case 2 → corrisponde
  4. "Two" viene stampato
  5. break esce dalla dichiarazione switch

Il punto importante è che lo switch non termina nel momento in cui un case corrisponde. Se termina dipende da se c’è un break.

3.2 break significa “Esci dallo switch”

break è un’istruzione che, dopo l’esecuzione del codice di un case, termina l’intera dichiarazione switch.

I principianti spesso fraintendono break così:

  • Un simbolo per terminare un case
  • Un incantesimo magico che causa un errore se mancante

Ma il suo vero ruolo è chiaramente:

“Non eseguire altri case; esci dalla dichiarazione switch.”

Ecco perché è importante.

3.3 Cosa succede se non scrivi break?

Ora, diamo un’occhiata a un esempio in cui omettiamo intenzionalmente break.

int number = 1;

switch (number) {
    case 1:
        System.out.println("One");
    case 2:
        System.out.println("Two");
    default:
        System.out.println("Other");
}

Quando esegui questo codice, l’output sarà:

One
Two
Other

Ecco perché:

  • case 1 corrisponde → l’esecuzione inizia lì
  • Nessun break → anche il case 2 successivo viene eseguito
  • Poi anche il default viene eseguito

Questo comportamento—dove tutto dopo il case corrispondente viene eseguito—è chiamato
fall‑through.

3.4 Il fall‑through è una caratteristica, non un bug

Il fall‑through non è un bug o un difetto in Java.
È un comportamento progettato intenzionalmente.

Storicamente, switch‑case è stato progettato con:

  • Sintassi simile a C come base
  • La possibilità di condividere la stessa logica tra più case

Tuttavia, nello sviluppo Java moderno,

  • è facile da fraintendere
  • spesso diventa una fonte di bug

quindi il fall‑through non intenzionale dovrebbe essere evitato.

3.5 default è comunemente scritto per ultimo

default viene eseguito quando nessun case corrisponde.

default:
    System.out.println("Other");

Sebbene sia legale posizionare default al centro, è generalmente scritto per ultimo per leggibilità.

Inoltre, abituarsi a scrivere break anche in default aiuta a prevenire incidenti quando il codice viene modificato in futuro.

3.6 Punti chiave dalla sintassi di base

Per riassumere, questi tre punti sono i più importanti:

  • case è un’etichetta che indica dove inizia l’esecuzione
  • Senza break, si verifica il fall‑through
  • default è scritto per gestire valori inaspettati

Se comprendi questi tre, hai già assimilato le basi di switch‑case.

4. La trappola del “Fall‑through” che i principianti colpiscono sempre

4.1 Cosa significa il Fall‑through

Il fall‑through è il comportamento in una dichiarazione switch dove l’esecuzione continua dal case corrispondente ai case successivi finché non c’è un break.

Molti principianti tendono a supporre qualcosa del genere:

  • “Se un case corrisponde, viene eseguito solo quel case.”
  • “Non passerà al case successivo.”

Ma il switch‑case di Java non funziona così.
Un case è solo un punto di partenza, e devi definire esplicitamente il punto di arresto con break.

4.2 Perché avviene il Fall‑through

Il fall‑through avviene a causa della struttura interna di una dichiarazione switch.

  • Una dichiarazione switch è vicina a una struttura basata su salti
  • L’esecuzione salta alla posizione del case corrispondente
  • Dopo di ciò, l’esecuzione continua normalmente dall’alto verso il basso

Quindi, invece di pensarlo come un “blocco di ramo” come if‑else, è più facile comprenderlo come un meccanismo che avvia il flusso di esecuzione da qualche punto al centro.

4.3 Perché il Fall‑through non intenzionale è pericoloso

Il fall‑through fa parte del design del linguaggio, ma quando non è intenzionale, diventa una fonte di bug.

Ad esempio:

  • Vengono stampati più messaggi inaspettatamente
  • La logica viene eseguita più volte
  • Log o aggiornamenti al database avvengono in modi non intenzionali

Ciò che è particolarmente spaventoso è che non genera un errore di compilazione e “funziona” normalmente.
Questo rende più difficile notare la causa, e potrebbe essere scoperto più tardi come difetto.

4.4 La regola base per prevenire il Fall‑through

La regola più semplice per prevenire il fall‑through è questa:

Scrivi sempre break alla fine di ogni case

Seguire semplicemente questa regola previene la maggior parte degli incidenti di fall‑through che i principianti incontrano.

Nei progetti reali, è comune avere standard di codifica come “Scrivi break a meno che non ci sia un motivo speciale per non farlo.”

4.5 Casi in cui il Fall‑through è usato intenzionalmente

D’altra parte, ci sono situazioni in cui il fall‑through è usato intenzionalmente.

Un esempio classico è quando vuoi che più case condividano la stessa elaborazione.

int day = 6;

switch (day) {
    case 6:
    case 7:
        System.out.println("Weekend");
        break;
    default:
        System.out.println("Weekday");
}

In questo esempio, l’intento è chiaro: stampare "Weekend" per entrambi:

  • 6 (Sabato)
  • 7 (Domenica)

Quando sono soddisfatte condizioni come le seguenti:

  • i case sono consecutivi
  • la stessa elaborazione segue
  • l’intento è ovvio (o documentato)

then fall-through can be a safe and readable approach.

4.6 Note sull’uso del fall-through

Se usi il fall-through intenzionalmente,
la considerazione per il lettore è estremamente importante.

  • Rendi l’intento esplicito con un commento
  • Mantieni il processamento breve
  • Evita di cadere completamente nel default

Se non lo fai, diventa poco chiaro se il comportamento è intenzionale o semplicemente un break dimenticato.

4.7 Checklist: Capisci il fall-through?

Per confermare se comprendi il fall-through, verifica quanto segue:

  • Senza break, il caso successivo verrà eseguito anche
  • Il fall-through è una specifica, non un errore
  • Nel lavoro reale, evitalo di default e usalo solo quando necessario

Se hai capito fino a qui, hai già superato il più grande ostacolo del switch-case.

5. Valori che puoi / non puoi mettere in case (Sorprendentemente importanti)

In questa sezione, organizzeremo ciò che puoi scrivere in case e ciò che non puoi.
È un punto in cui non solo i principianti ma anche gli sviluppatori Java esperti a volte si chiedono,
“Aspetta—perché questo diventa di nuovo un errore?”

5.1 In linea di principio, case può usare solo “Costanti”

Ciò che puoi specificare in case è una costante il cui valore è fissato al momento della compilazione.

Ad esempio, questi valori funzionano senza problemi:

switch (number) {
    case 1:
        // OK
        break;
    case 10:
        // OK
        break;
}

D’altra parte, non puoi scrivere qualcosa del genere:

int x = 5;

switch (number) {
    case x:   // compile-time error
        break;
}

Il motivo è semplice: x è una variabile determinata a runtime.
switch-case deve poter finalizzare i candidati dei rami al momento della compilazione, quindi variabili e valori dinamici non possono essere usati.

5.2 Perché le variabili non possono essere usate in case

I principianti spesso chiedono:

Se posso usare variabili in un’istruzione if, perché non posso usarle in case?

Questo dipende dalla differenza nella filosofia di progettazione tra if e switch.

  • if : valuta le condizioni a runtime
  • switch : controlla una corrispondenza tra valori predefiniti

Un switch è una costruzione pensata per gestire rami con candidati noti
in modo efficiente e chiaro.

Quindi, se le condizioni dei tuoi rami cambiano dinamicamente, scegliere if-else è l’approccio corretto.

5.3 Tipi comuni che puoi usare in switch

In Java, solo alcuni tipi sono consentiti in switch.
Esempi tipici includono:

  • int, byte, short, char
  • enum
  • String

In particolare, una volta che String è diventato utilizzabile in switch, codice come il seguente è diventato naturale:

String command = "start";

switch (command) {
    case "start":
        System.out.println("開始");
        break;
    case "stop":
        System.out.println("停止");
        break;
    default:
        System.out.println("不明なコマンド");
}

Questo è un pattern usato molto spesso nei progetti reali,
come il routing dei comandi o la gestione degli stati.

5.4 Esempi di ciò che non puoi scrivere in case

Non puoi scrivere cose come le seguenti in case:

  • confronti ( > , < , >= , ecc.)
  • notazione di intervallo (come case 1〜5 )
  • risultati di chiamate a metodi
  • espressioni calcolate a runtime

Ad esempio, tutti i seguenti sono errori:

case number > 5:
case getValue():
case a + b:

Questi rientrano nel dominio del ramo condizionale,
quindi sono casi in cui dovresti usare if-else.

5.5 switch con enum è altamente sicuro

Un switch-case che utilizza un enum ha il vantaggio di essere
type-safe e meno soggetto a bug.

enum Status {
    READY, RUNNING, STOPPED
}

switch (status) {
    case READY:
        break;
    case RUNNING:
        break;
    case STOPPED:
        break;
}

Se vengono aggiunti nuovi valori enum, diventa più facile notare i casi mancanti, quindi questo approccio è ampiamente usato nello sviluppo reale.

5.6 Un modo semplice per ricordare le restrizioni di case

Per ricordare la regola per case, basta questa frase:

Nel caso, puoi scrivere solo valori già fissati in anticipo.

Con quella linea guida, diventa più facile decidere:

  • dinamico → if
  • statico → switch

Questo rende la scelta molto più semplice.

6. Come dovresti scegliere tra if-else e switch?

Una volta che inizi a capire switch-case, inevitabilmente arriverai a questa domanda:

“Non potrebbe essere scritto con if-else?”

In molti casi, è vero—puoi ottenere lo stesso risultato con entrambi.
Tuttavia, nello sviluppo reale, scegliere quello giusto fa una grande differenza in leggibilità e manutenibilità.

6.1 Casi in cui switch è più adatto

switch funziona meglio nelle seguenti condizioni:

  • La decisione si basa su un singolo valore
  • I valori possibili sono conosciuti in anticipo
  • Ci sono molti rami (ad esempio tre o più)
  • Ogni ramo esegue una logica relativamente semplice

Esempi tipici includono:

  • Ramificazione per codici di stato
  • Cambiare comportamento per stringhe di comando
  • Gestire logica per valore enum

In queste situazioni, switch-case rende la struttura complessiva facile da cogliere a colpo d’occhio.

6.2 Casi in cui if-else è più adatto

D’altra parte, if-else è più appropriato in queste situazioni:

  • Condizioni di intervallo (ad esempio, “maggiore o uguale a X”)
  • Condizioni multiple combinate (AND / OR)
  • Condizioni che cambiano dinamicamente
  • Un piccolo numero di rami

Esempi includono:

  • Valutazione per punteggio (80+, 60+, ecc.)
  • Controlli di intervallo di importo o data
  • Condizioni che combinano più flag

Poiché questi non possono essere espressi bene con switch, usare if-else è la scelta naturale.

6.3 Non forzare tutto in switch

Un errore comune dei principianti è:

  • Cercare di scrivere tutta la logica di ramificazione con switch
  • Sostituire meccanicamente le istruzioni if con case

Tuttavia, switch non è onnipotente.
Usare una costruzione che non si adatta alla natura della condizione danneggia in realtà la leggibilità.

La qualità del codice è determinata meno dalla “brevità” e più da
quanto chiaramente l’intento è comunicato.

6.4 Una checklist pratica per scegliere

Quando non sei sicuro, chiediti queste domande:

  • La decisione si basa su un singolo valore?
  • I valori possibili sono fissi?
  • Posso capire l’intera logica semplicemente scansionando i casi?

Se tutte le risposte sono “sì”, switch è un candidato forte.
Se anche una è “no”, considera if-else.

6.5 Espressioni switch come altra opzione

A partire da Java 14, hai anche le espressioni switch come opzione.

  • Vuoi trattare il risultato del ramo come un valore
  • Vuoi evitare completamente il fall-through
  • Non vuoi dimenticare break

In tali casi, usare un’espressione switch invece di una tradizionale istruzione switch
mantiene il codice più pulito e sicuro.

6.6 Riepilogo della scelta

In breve:

  • Opzioni fisse e ben definite → switch-case
  • Condizioni dinamiche o complesse → if-else

Questo modo di pensare è la base.

7. Comprendere le espressioni switch (Java 14 e versioni successive)

Questa sezione spiega le espressioni switch, che differiscono dalle tradizionali istruzioni switch.
Potresti aver sentito che “la sintassi è cambiata nelle versioni recenti di Java”.

La conclusione subito: le espressioni switch sono un’evoluzione progettata per ridurre gli errori e chiarire l’intento.

7.1 Cos’è un’espressione switch?

Il switch tradizionale è un’istruzione, ma un’espressione switch è un’espressione che restituisce un valore.

Le differenze più evidenti sono:

  • Usa la sintassi a freccia: case value -> action
  • Non è necessario break
  • L’intero switch restituisce un unico valore

7.2 Confronto con il switch tradizionale

Prima, lo stile tradizionale:

String result;

switch (number) {
    case 1:
        result = "One";
        break;
    case 2:
        result = "Two";
        break;
    default:
        result = "Other";
}

La stessa logica scritta come espressione switch appare così:

String result = switch (number) {
    case 1 -> "One";
    case 2 -> "Two";
    default -> "Other";
};

Questo approccio:

  • Non richiede una variabile pre‑dichiarata
  • Non può verificarsi il fall‑through per progettazione

che porta a codice più corto e più chiaro.

7.3 Perché break non è più necessario

Nelle espressioni switch, ogni case deve produrre esattamente un risultato, quindi l’esecuzione non fluisce mai nel case successivo.

Ecco perché problemi come:

  • dimenticare break
  • fall‑through non intenzionale

sono strutturalmente impossibili.

7.4 Scrivere logica su più righe

Puoi anche scrivere logica su più righe in un’espressione switch:

String result = switch (number) {
    case 1 -> {
        System.out.println("Processing 1");
        yield "One";
    }
    case 2 -> {
        System.out.println("Processing 2");
        yield "Two";
    }
    default -> "Other";
};

Qui, yield specifica esplicitamente il valore restituito dall’espressione switch.

7.5 Quando le espressioni switch brillano

Le espressioni switch sono particolarmente utili quando:

  • Vuoi assegnare direttamente il risultato di un ramo a una variabile
  • Vuoi evitare completamente il fall‑through
  • Vuoi trattare la logica di ramificazione come un’espressione

Possono essere meno adatte per logica lunga e ricca di effetti collaterali.

7.6 Scegliere tra forme tradizionali ed espressioni

Nella pratica, una regola semplice funziona bene:

  • Restituire un valore → espressione switch
  • Flusso di controllo puro → istruzione switch tradizionale

Non è necessario standardizzare su uno solo—scegli in base allo scopo.

8. Un altro significato spesso confuso in “java case” (Maiuscole / Minuscole)

La parola chiave “java case” è spesso usata in un senso completamente diverso rispetto a switch-case.

Quel significato è la distinzione tra maiuscole e minuscole.

8.1 case-sensitive vs case-insensitive

Nei contesti di programmazione, “case” è comunemente usato così:

  • case-sensitive: le maiuscole e le minuscole sono trattate come diverse
  • case-insensitive: le maiuscole e le minuscole sono trattate come uguali

In Java, le comparazioni di stringhe sono case-sensitive per impostazione predefinita.

8.2 equals vs equalsIgnoreCase

Questi due metodi si comportano in modo molto diverso:

"Java".equals("java");          // false
"Java".equalsIgnoreCase("java"); // true
  • equals : distingue maiuscole e minuscole
  • equalsIgnoreCase : ignora le differenze di caso

Quando si gestiscono input dell’utente o comandi, quest’ultimo aiuta a evitare incongruenze inutili.

8.3 C’è qualche relazione con switch-case?

È importante notare che:

  • case in switch-case
  • case nelle discussioni su maiuscole/minuscole

sono completamente non correlate nel significato.

Condividono solo la stessa parola; non c’è alcuna connessione funzionale o sintattica.

8.4 Come evitare confusione

Per tenere le cose chiare, pensale così:

  • case in switch → un’etichetta di ramo
  • case in stringhe → distinzione tra maiuscole e minuscole

Una volta prestata attenzione al contesto, diventa facile capire quale significato è inteso.

9. Errori comuni (Prospettiva di debug)

9.1 Dimenticare break

Questo è di gran lunga l’errore più comune.

  • Il fall‑through passa inosservato
  • Output o logica vengono eseguiti più volte

Seguire la regola base “scrivi break alla fine di ogni case” previene questo.

9.2 Non scrivere default

Senza default:

  • Valori inaspettati non provocano alcuna azione
  • I bug sono più difficili da rilevare

Come minimo, è consigliato aggiungere logging o lanciare un’eccezione.

9.3 Lasciare che lo switch cresca troppo

Quando il numero di case cresce troppo:

  • La leggibilità ne risente
  • Le modifiche diventano rischiose

In tali casi, considera l’uso di enum + dispatch di metodo o ramificazione basata su Map.

9.4 Usare switch dove if è più appropriato

Forzare controlli di intervallo o condizioni composte in switch rende il codice più difficile da capire.

Vale la pena fermarsi e chiedersi: “Questo ramo è davvero adatto a switch?”

10. FAQ

10.1 È necessario break in un case?

In linea di principio, sì.
Tranne quando si utilizza intenzionalmente il fall‑through, scrivere break rende il tuo codice più sicuro.

10.2 Devo sempre scrivere default?

È fortemente consigliato.
Puoi rilevare valori inattesi e rendere il debug più semplice.

10.3 Da quale versione posso usare le espressioni switch?

Sono ufficialmente disponibili a partire da Java 14.
Non possono essere usate nelle versioni precedenti.

10.4 È accettabile raggruppare più case insieme?

Sì, finché eseguono la stessa logica.
Aggiungere un commento per chiarire l’intento lo rende ancora più sicuro.

10.5 Come confronto le stringhe senza considerare il case?

Usa equalsIgnoreCase per il confronto delle stringhe.
Questo è un concetto separato da switch-case, quindi fai attenzione a non confonderli.