JavaRush /Java Blog /Random-IT /Null è un oggetto in Java?

Null è un oggetto in Java?

Pubblicato nel gruppo Random-IT
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:
Null è un oggetto in Java?  -1
  1. Non è possibile chiamare un metodo con il valore null: x.m()genererà un errore quando xil valore è null e mil metodo non è statico. A proposito, se msi tratta di un metodo statico, va tutto bene, poiché solo la classe è importante xe il valore viene ignorato.

  2. C'è solo un null per tutti e non uno separato per ogni classe. Così, ((String) null == (Hashtable) null)ad esempio.

  3. È 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), ma butstring.compareTo (null)non funzionerà. Quindi indica sempre nei commenti javadoc dei tuoi metodi se null è accettabile come parametri, se non è del tutto ovvio.

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

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

    Confronta tre implementazioni di nodi dell'albero binario con metodi di output della console sequenziale:


  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() { }
    }
Autore della risposta: Peter Norvig, scienziato americano nel campo dell'intelligenza artificiale, direttore della ricerca presso Google
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION