null è un oggetto? Posso assolutamente dire che non è così. Nel senso che
(null instanceof Object)
darà valore false
. Ecco cos'altro devi sapere su null:
- Non è possibile chiamare un metodo con il valore null:
x.m()
genererà un errore quandox
il valore è null em
il metodo non è statico. A proposito, sem
si tratta di un metodo statico, va tutto bene, poiché solo la classe è importantex
e il valore viene ignorato. - C'è solo un null per tutti e non uno separato per ogni classe. Così,
((String) null == (Hashtable) null)
ad esempio. - È perfettamente accettabile passare null come parametro a un metodo se il metodo lo consente (alcuni metodi consentono un parametro null, altri no). Quindi, ad esempio, potresti scrivere
System.out.println (null)
, mabutstring.compareTo (null)
non funzionerà. Quindi indica sempre nei commenti javadoc dei tuoi metodi se null è accettabile come parametri, se non è del tutto ovvio. - Nel JDK dalla versione 1.1 alla 1.1.5, il passaggio null come argomento letterale al costruttore di una classe interna anonima (ad esempio,
new SomeClass(null) { ...}
causava un errore del compilatore. Tuttavia, è possibile passare un'espressione con il valore null, oppure passare un valore forzato nullo, nella formanew SomeClass((String) null) { ...}
- Esistono almeno tre casi diversi, che di solito vengono espressi utilizzando null:
- Non inizializzato (nessuna inizializzazione). Una variabile o uno slot a cui non è stato ancora assegnato alcun valore.
- Inesistente/non applicabile Ad esempio, i nodi terminali di un albero binario possono essere chiamati nodi ordinari con figli nulli.
- Vuoto (vuoto di qualcosa). Ad esempio, puoi utilizzare null per rappresentare un albero vuoto. Si noti che questo è abbastanza diverso dal caso precedente (nella pratica vengono spesso confusi). La differenza è se null è un nodo dell'albero accettabile o se null significa che il valore non deve essere trattato come un nodo dell'albero.
-
// null означает «не применимо» // Здесь нет пустого дерева. class Node { Object data; Node left, right; void print() { if (left != null) left.print(); System.out.println(data); if (right != null) right.print(); } }
-
// null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) { if (node != null) node.print(); } void print() { print(left); System.out.println(data); print(right); } }
-
// Отдельный класс для Empty // null не используется interface Node { void print(); } class DataNode implements Node{ Object data; Node left, right; void print() { left.print(); System.out.println(data); right.print(); } } class EmptyNode implements Node { void print() { } }
Confronta tre implementazioni di nodi dell'albero binario con metodi di output della console sequenziale:
GO TO FULL VERSION