¿Es nulo un objeto? Puedo decir absolutamente que no lo es. En el sentido de que
(null instanceof Object)
dará el valor false
. Esto es lo que necesita saber sobre null:
- No puede llamar a un método con el valor nulo:
x.m()
generará un error cuandox
el valor sea nulo ym
el método no sea estático. Por cierto, sim
es un método estático, todo está bien, ya que solo es importante la clasex
, y se ignora el valor. - Solo hay un valor nulo para todos y no uno separado para cada clase. Así,
((String) null == (Hashtable) null)
por ejemplo. - Es perfectamente aceptable pasar nulo como parámetro a un método si el método lo permite (algunos métodos permiten un parámetro nulo, otros no). Así, por ejemplo, puedes escribir
System.out.println (null)
, perobutstring.compareTo (null)
no funcionará. Por lo tanto, indique siempre en los comentarios javadoc de sus métodos si null es aceptable como parámetro, si no es completamente obvio. - En el JDK de la versión 1.1 a 1.1.5, pasar nulo como argumento literal al constructor de una clase interna anónima (por ejemplo,
new SomeClass(null) { ...}
provocó un error del compilador. Sin embargo, puede pasar una expresión con el valor nulo o pasar una expresión forzada). nulo, en la formanew SomeClass((String) null) { ...}
- Hay al menos tres casos diferentes, que normalmente se expresan mediante nulo:
- No inicializado (sin inicialización). Una variable o ranura a la que aún no se le ha asignado ningún valor.
- No existente/no aplicable Por ejemplo, los nodos terminales de un árbol binario pueden denominarse nodos ordinarios con hijos nulos.
- Vacío (vacío de algo). Por ejemplo, puedes usar nulo para representar un árbol vacío. Tenga en cuenta que esto es bastante diferente al caso anterior (a menudo se confunden en la práctica). La diferencia es si nulo es un nodo de árbol aceptable o si nulo significa que el valor no necesita ser tratado como un nodo de árbol.
-
// 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 tres implementaciones de nodos de árbol binario con métodos de salida de consola secuencial:
GO TO FULL VERSION