Per capire cosa significa null in Java, diamo un'occhiata a un'analogia con i numeri: il numero 0 simboleggia l'assenza di qualcosa e null significa la stessa cosa quando si tratta di tipi di dati di riferimento. Se a un campo di un tipo di riferimento (come String , Object o StringBuilder ) non viene assegnato esplicitamente un valore, allora, per analogia con i tipi primitivi, riceve un valore predefinito e tale valore è null :
Codice | Uscita console |
---|---|
|
0
nullo |
Ma se dichiari un array come questo:
String[] strings = new String[12];
verrà creato un array contenente 12 elementi e tutti saranno null :
Codice | Uscita console |
---|---|
|
Elemento 0: nullo
Elemento 1: nullo Elemento 2: nullo Elemento 3: nullo Elemento 4: nullo Elemento 5: nullo Elemento 6: nullo Elemento 7: nullo Elemento 8: nullo Elemento 9: nullo Elemento 10: nullo Elemento 11: nullo |
Come puoi vedere, quando concatenato con una stringa, il valore null diventa la stringa " null ". Detto questo, se chiami il metodo toString() su di esso, in questo modo:
String[] strings = null;
System.out.println(strings.toString());
quindi otterrai una NullPointerException (discuteremo le eccezioni in dettaglio più avanti). La stessa cosa accade se provi a chiamare qualsiasi altro metodo su null (l'eccezione sono i metodi statici, che imparerai a conoscere a breve):
public static void main(String[] args) {
StringBuilder sb = null;
sb.append("test"); // This will compile, but there will be a runtime error
}
null è, tra le altre cose, una parola chiave riservata (come public o static ), quindi non puoi creare una variabile, un metodo o una classe denominata null . Come le altre, questa parola chiave fa distinzione tra maiuscole e minuscole (potresti aver notato che scriviamo null in minuscolo ovunque). Questo significa:
String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile
Diamo un'occhiata a cos'altro puoi e non puoi fare con null :
-
Puoi assegnare null a qualsiasi riferimento:
StringBuilder sb = null;
-
null può essere convertito in qualsiasi tipo di riferimento:
String s = (String) null; // This will compile, but doing this doesn't make any sense :)
-
null non può essere assegnato a una variabile primitiva:
int i = null; // This won't compile
-
null può essere confrontato usando == e !=
-
null == null restituisce true
Nelle lezioni precedenti abbiamo parlato di come ogni cosa in Java sia un oggetto e ogni oggetto abbia un tipo.
Cosa possiamo dire di null a questo riguardo? null è un valore letterale di un certo tipo e questo tipo non ha nome. E poiché questo tipo non ha nome, è impossibile dichiarare una variabile di questo tipo o eseguirne il cast. Pertanto, null è l'unico rappresentante di questo tipo senza nome. In pratica, possiamo ignorare questo tipo e pensare a null come a un letterale speciale che può essere assegnato a qualsiasi variabile di riferimento.
Cose da ricordare:
- null è il valore predefinito per i tipi di dati di riferimento
- null significa "nessun valore"
- Se chiamiamo un metodo su un oggetto il cui valore è null , il codice verrà compilato ma in fase di esecuzione otterremo una NullPointerException .
GO TO FULL VERSION