JavaRush /Java 博客 /Random-ZH /Java中null是对象吗?

Java中null是对象吗?

已在 Random-ZH 群组中发布
null 是一个对象吗?我绝对可以说不是。从某种意义上说,(null instanceof Object)它将赋予价值false。以下是您还需要了解的有关 null 的信息:
Java中null是对象吗? - 1
  1. 不能调用值为 null 的方法:当值为 null 并且该方法是非静态x.m()时,它将引发错误。顺便说一句,如果它是静态方法,则一切都很好,因为只有类是重要的,并且值被忽略。xmmx

  2. 所有类都只有一个 null,而不是每个类都有一个单独的 null。因此,((String) null == (Hashtable) null)举例来说。

  3. 如果方法允许的话,将 null 作为参数传递给方法是完全可以接受的(有些方法允许 null 参数,有些则不允许)。例如,你可能会写System.out.println (null),但butstring.compareTo (null)它不会起作用。因此,如果不完全明显,请务必在方法的 javadoc 注释中指出是否可以接受 null 作为其参数。

  4. 在 JDK 从 1.1 到 1.1.5 版本中,将 null 作为字面参数传递匿名内部类的构造函数(例如,new SomeClass(null) { ...}会导致编译器错误)。但是,您可以传递值为 null 的表达式,或者传递强制的空,形式为new SomeClass((String) null) { ...}

  5. 至少有三种不同的情况,通常使用 null 来表示:

    • 未初始化(未初始化)。尚未分配任何值的变量或槽。

    • 不存在/不适用。例如,二叉树的终端节点可以称为具有空子节点的普通节点。

    • (某物的空虚)。例如,您可以使用 null 来表示空树。请注意,这与前面的情况有很大不同(它们在实践中经常被混淆)。区别在于 null 是否是可接受的树节点,或者 null 是否表示该值不需要被视为树节点。

    比较二叉树节点的三种实现与顺序控制台输出方法:


  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() { }
    }
答案作者: Peter Norvig,美国人工智能领域科学家、谷歌研究总监
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION