HOWTO · Java
Letterale carattere vuoto in Java
Questo articolo descrive come rappresentare un carattere letterale vuoto in Java
In questa pagina
In Java non esiste un char primitivo vuoto: un char contiene un’unità di codice UTF-16. Il letterale '' non è valido perché non contiene alcun carattere. È possibile creare un char[] vuoto, ma si tratta di un array con zero elementi, non di un valore char. Se non serve testo, usa una String vuota; se serve un valore carattere, scegline uno reale, come uno spazio o U+0000.
Perché '' non è valido e uno spazio è diverso
Un letterale char si scrive tra apici singoli e contiene un carattere. L’espressione char ch = ''; non viene compilata. Al contrario, ' ' è un char valido che contiene uno spazio. Questo piccolo programma rende visibile lo spazio tra parentesi quadre e ne stampa il valore numerico:
public class CharExample {
public static void main(String[] args) {
char space = ' ';
System.out.println("[" + space + "]");
System.out.println((int) space);
}
}
[ ]
32
Le parentesi quadre distinguono lo spazio dal testo circostante e il numero intero ne mostra il valore carattere. Uno spazio è comunque presente nei confronti e nelle operazioni sulle stringhe: usalo solo quando il dato previsto è uno spazio bianco.
Usa una String vuota quando non c’è testo
Quando il dato rappresenta l’assenza di testo, usa String value = "";. Una String vuota ha lunghezza zero ed è adatta ai campi di testo, alla concatenazione e alle API che si aspettano una stringa. Non è un char, quindi Java non consente di assegnare "" a una variabile primitiva char. È possibile anche creare un char[] vuoto, ma rappresenta una sequenza senza elementi, non un singolo carattere assente.
Usa \0 o \u0000 per il carattere nullo
In Java U+0000 si scrive \0 oppure \u0000; entrambe le forme rappresentano lo stesso valore char. U+0000 è talvolta chiamato carattere nullo, ma non è un carattere vuoto e in genere non termina una String Java. Quando lo si stampa può apparire come uno spazio vuoto: per verificare che cosa contiene, controllane il valore numerico. Occupa comunque un’unità di codice e contribuisce al valore restituito da length() di una stringa Java.
public class NullCharacterExample {
public static void main(String[] args) {
char shortEscape = '\0';
char unicodeEscape = '\u0000';
String value = "A" + shortEscape + "B";
System.out.println(shortEscape == unicodeEscape);
System.out.println((int) shortEscape);
System.out.println(value.length());
}
}
true
0
3
Il codice confronta le due forme, converte U+0000 in un intero e misura la stringa risultante. In questo modo è possibile verificare il valore senza dipendere da come lo visualizza il terminale. La stringa ha lunghezza tre perché contiene A, U+0000 e B.
Usa Character.MIN_VALUE oppure null con Character
Questo esempio eseguibile racchiude una lettera in un wrapper e ne stampa il valore e il controllo di presenza:
public class CharacterExample {
public static void main(String[] args) {
Character value = Character.valueOf('J');
System.out.println(value);
System.out.println(value == null);
}
}
J
false
Character.MIN_VALUE è un modo esplicito per ottenere U+0000; non è un valore vuoto distinto. Usalo quando il formato dei dati richiede proprio quel carattere. Un wrapper Character può invece contenere null per rappresentare un valore assente. In questo caso manca il riferimento: non è un char, quindi il codice deve controllarlo prima di convertirlo automaticamente in un tipo primitivo o di chiamarne i metodi.
Java inizializza a U+0000 un campo di istanza di tipo char. Una variabile locale char non ha un valore predefinito automatico e deve essere assegnata prima di essere letta. Scegli String se manca il testo, Character con null se il carattere è facoltativo e \0 solo quando U+0000 ha un significato specifico.