JavaRush /Blog Java /Random-ES /¿Es nulo un objeto en Java?

¿Es nulo un objeto en Java?

Publicado en el grupo Random-ES
¿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:
¿Es nulo un objeto en Java?  - 1
  1. No puede llamar a un método con el valor nulo: x.m()generará un error cuando xel valor sea nulo y mel método no sea estático. Por cierto, si mes un método estático, todo está bien, ya que solo es importante la clase x, y se ignora el valor.

  2. Solo hay un valor nulo para todos y no uno separado para cada clase. Así, ((String) null == (Hashtable) null)por ejemplo.

  3. 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), pero butstring.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.

  4. 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) { ...}

  5. 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.

    Compare tres implementaciones de nodos de árbol binario con métodos de salida de consola secuencial:


  6. // null означает «не применимо»
    // Здесь нет пустого дерева.
    class Node {
      Object data;
      Node left, right;
    
      void print() {
        if (left != null)
          left.print();
        System.out.println(data);
        if (right != null)
          right.print();
      }
    }

  7. // 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);
      }
    }

  8. // Отдельный класс для 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() { }
    }
Autor de la respuesta: Peter Norvig, científico estadounidense en el campo de la inteligencia artificial, director de investigación de Google
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION