Il secondo esempio è chiaramente superiore. Il significato del secondo esempio è immediatamente evidente quando si guarda il codice. Il significato del primo esempio è evidente solo se hai memorizzato l'intera tabella ASCII nella tua testa.
Devi distinguere tra il controllo di un carattere specifico o il controllo di un intervallo o di una classe di caratteri.
1) Verifica di un carattere specifico.
Per caratteri ordinari, usa il carattere letterale, ad esempio if(ch=='z')...
. Se controlli contro caratteri speciali come tabulazione o interruzione di riga, dovresti usare gli escape, come if (ch=='\n')...
. Se il personaggio che stai cercando è inusuale (ad esempio, non immediatamente riconoscibile o non disponibile su una tastiera standard), potresti usare un codice di carattere esadecimale piuttosto che il carattere letterale. Ma dal momento che un codice esadecimale è un "valore magico", lo si estrae su una costante e lo si documenta:
const char snowman = 0x2603; // snowman char used to detect encoding issues
...
if (ch==showman)...
I codici esadecimali sono il modo standard per specificare i codici carattere.
2) Verifica di una classe o intervallo di caratteri
In realtà non dovresti farlo direttamente nel codice dell'applicazione, ma dovresti incapsularlo in una classe separata interessata solo alla classificazione dei caratteri. E dovresti essere diverso da questo, dal momento che le librerie esistono già per questo scopo e la classificazione dei caratteri è solitamente più complessa di quanto pensi, almeno se consideri caratteri al di fuori dell'intervallo ASCII.
Se ti preoccupi solo dei personaggi nell'intervallo ASCII, potresti usare letterali di caratteri in questa libreria, altrimenti probabilmente useresti letterali esadecimali. Se si guarda il codice sorgente per la libreria di caratteri incorporati Java, fa riferimento anche ai valori dei caratteri e agli intervalli utilizzando l'esadecimale, poiché questo è il modo in cui sono specificati nello standard Unicode.