Nulo é um objeto? Posso dizer com certeza que não. No sentido de que
(null instanceof Object)
dará o valor false
. Aqui está o que mais você precisa saber sobre null:
- Você não pode chamar um método com o valor nulo:
x.m()
isso gerará um erro quandox
o valor for nulo em
o método não for estático. Aliás, sem
for um método estático, está tudo bem, pois apenas a classe é importantex
e o valor é ignorado. - Existe apenas um nulo para todos, e não um nulo separado para cada classe. Assim,
((String) null == (Hashtable) null)
por exemplo. - É perfeitamente aceitável passar null como parâmetro para um método se o método permitir (alguns métodos permitem um parâmetro nulo, outros não). Então, por exemplo, você pode escrever
System.out.println (null)
, masbutstring.compareTo (null)
não funcionará. Portanto, sempre indique nos comentários javadoc dos seus métodos se null é aceitável como seus parâmetros, caso não seja completamente óbvio. - No JDK da versão 1.1 a 1.1.5, passar null como argumento literal para o construtor de uma classe interna anônima (por exemplo,
new SomeClass(null) { ...}
causava um erro do compilador. No entanto, você pode passar uma expressão com o valor null ou passar um valor forçado nulo, na formanew SomeClass((String) null) { ...}
- Existem pelo menos três casos diferentes, que geralmente são expressos usando nulo:
- Não inicializado (sem inicialização). Uma variável ou slot ao qual ainda não foi atribuído nenhum valor.
- Inexistente/não aplicável . Por exemplo, os nós terminais de uma árvore binária podem ser chamados de nós comuns com filhos nulos.
- Vazio (vazio de algo). Por exemplo, você pode usar null para representar uma árvore vazia. Observe que isso é bem diferente do caso anterior (eles são frequentemente confundidos na prática). A diferença é se null é um nó de árvore aceitável ou se null significa que o valor não precisa ser tratado como um nó de árvore.
-
// 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() { } }
Compare três implementações de nós de árvore binária com métodos de saída de console sequencial:
GO TO FULL VERSION