JavaRush /Java Blog /Random-TW /Java中null是物件嗎?

Java中null是物件嗎?

在 Random-TW 群組發布
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,美國人工智慧領域科學家、Google研究總監
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION