JavaRush /Java-Blog /Random-DE /Ist null ein Objekt in Java?

Ist null ein Objekt in Java?

Veröffentlicht in der Gruppe Random-DE
Ist null ein Objekt? Ich kann absolut sagen, dass das nicht der Fall ist. In dem Sinne, dass (null instanceof Object)es den Wert ergibt false. Folgendes müssen Sie sonst noch über null wissen:
Ist null ein Objekt in Java?  - 1
  1. Sie können keine Methode mit dem Wert Null aufrufen: x.m()Sie löst einen Fehler aus, wenn xder Wert Null ist und mdie Methode nicht statisch ist. Wenn mes sich um eine statische Methode handelt, ist übrigens alles in Ordnung, da nur die Klasse wichtig ist xund der Wert ignoriert wird.

  2. Es gibt nur eine Null für alle und nicht eine eigene für jede Klasse. So ((String) null == (Hashtable) null)zum Beispiel.

  3. Es ist durchaus akzeptabel, null als Parameter an eine Methode zu übergeben, wenn die Methode dies zulässt (einige Methoden erlauben einen Nullparameter, andere nicht). Sie können also beispielsweise schreiben System.out.println (null), aber es butstring.compareTo (null)wird nicht funktionieren. Geben Sie daher in den Javadoc-Kommentaren Ihrer Methoden immer an, ob null als Parameter akzeptabel ist, wenn dies nicht völlig offensichtlich ist.

  4. Im JDK von Version 1.1 bis 1.1.5 verursachte die Übergabe von null als Literalargument an den Konstruktor einer anonymen inneren Klasse (z. B.) new SomeClass(null) { ...}einen Compilerfehler. Sie können jedoch einen Ausdruck mit dem Wert null oder einen erzwungenen Ausdruck übergeben null, im Formularnew SomeClass((String) null) { ...}

  5. Es gibt mindestens drei verschiedene Fälle, die normalerweise mit null ausgedrückt werden:

    • Nicht initialisiert (keine Initialisierung). Eine Variable oder ein Slot, der noch kein Wert zugewiesen wurde.

    • Nicht vorhanden/nicht anwendbar . Beispielsweise können die Endknoten eines Binärbaums als gewöhnliche Knoten mit Null-Kindern bezeichnet werden.

    • Leer (Leere von etwas). Sie können beispielsweise null verwenden, um einen leeren Baum darzustellen. Beachten Sie, dass sich dies deutlich vom vorherigen Fall unterscheidet (in der Praxis kommt es oft zu Verwechslungen). Der Unterschied besteht darin, ob null ein akzeptabler Baumknoten ist oder ob null bedeutet, dass der Wert nicht als Baumknoten behandelt werden muss.

    Vergleichen Sie drei Implementierungen von Binärbaumknoten mit sequentiellen Konsolenausgabemethoden:


  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 der Antwort: Peter Norvig, amerikanischer Wissenschaftler auf dem Gebiet der künstlichen Intelligenz, Forschungsdirektor bei Google
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION