JavaRush /Blog Java /Random-FR /Est-ce que null est un objet en Java ?

Est-ce que null est un objet en Java ?

Publié dans le groupe Random-FR
Est-ce que null est un objet ? Je peux absolument affirmer que ce n'est pas le cas. Dans le sens où (null instanceof Object)cela donnera de la valeur false. Voici ce que vous devez savoir d’autre sur null :
Est-ce que null est un objet en Java ?  - 1
  1. Vous ne pouvez pas appeler une méthode avec la valeur null : x.m()elle générera une erreur lorsque xla valeur est nulle et mque la méthode est non statique. À propos, s'il ms'agit d'une méthode statique, tout va bien, puisque seule la classe est importante xet que la valeur est ignorée.

  2. Il n’y a qu’un seul null pour tous, et non un distinct pour chaque classe. Ainsi, ((String) null == (Hashtable) null)par exemple.

  3. Il est parfaitement acceptable de passer null en paramètre à une méthode si la méthode le permet (certaines méthodes autorisent un paramètre null, d'autres non). Ainsi, par exemple, vous pouvez très bien écrire System.out.println (null), mais cela butstring.compareTo (null)ne fonctionnera pas. Indiquez donc toujours dans les commentaires javadoc de vos méthodes si null est acceptable comme paramètres, si ce n'est pas complètement évident.

  4. Dans le JDK des versions 1.1 à 1.1.5, passer null comme argument littéral au constructeur d'une classe interne anonyme (par exemple, new SomeClass(null) { ...}provoquait une erreur du compilateur. Cependant, vous pouvez passer une expression avec la valeur null, ou passer une valeur forcée nul, sous la formenew SomeClass((String) null) { ...}

  5. Il existe au moins trois cas différents, qui sont généralement exprimés par null :

    • Non initialisé (pas d'initialisation). Une variable ou un emplacement auquel aucune valeur n’a encore été attribuée.

    • Inexistant/sans objet . Par exemple, les nœuds terminaux d'un arbre binaire peuvent être appelés nœuds ordinaires avec des enfants nuls.

    • Vide (vide de quelque chose). Par exemple, vous pouvez utiliser null pour représenter une arborescence vide. A noter que ceci est assez différent du cas précédent (ils sont souvent confondus en pratique). La différence est de savoir si null est un nœud d'arbre acceptable ou si null signifie que la valeur n'a pas besoin d'être traitée comme un nœud d'arbre.

    Comparez trois implémentations de nœuds d'arborescence binaire avec des méthodes de sortie de console séquentielle :


  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() { }
    }
Auteur de la réponse : Peter Norvig, scientifique américain dans le domaine de l'intelligence artificielle, directeur de recherche chez Google
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION