JavaRush /Blogue Java /Random-PT /Nulo é um objeto em Java?

Nulo é um objeto em Java?

Publicado no grupo Random-PT
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:
Nulo é um objeto em Java?  - 1
  1. Você não pode chamar um método com o valor nulo: x.m()isso gerará um erro quando xo valor for nulo e mo método não for estático. Aliás, se mfor um método estático, está tudo bem, pois apenas a classe é importante xe o valor é ignorado.

  2. Existe apenas um nulo para todos, e não um nulo separado para cada classe. Assim, ((String) null == (Hashtable) null)por exemplo.

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

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

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

    Compare três implementações de nós de árvore binária com métodos de saída de console sequencial:


  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 da resposta: Peter Norvig, cientista americano na área de inteligência artificial, diretor de pesquisa do Google
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION