null 是物件嗎?我絕對可以說不是。從某種意義上說,
(null instanceof Object)
它將賦予價值false
。以下是您還需要了解的有關 null 的資訊:
- 不能呼叫值為 null 的方法:當值為 null 且該方法是非靜態
x.m()
時,它將引發錯誤。順便說一句,如果它是靜態方法,則一切都很好,因為只有類別是重要的,並且值被忽略。x
m
m
x
- 所有類別都只有一個 null,而不是每個類別都有一個單獨的 null。因此,
((String) null == (Hashtable) null)
舉例來說。 - 如果方法允許的話,將 null 作為參數傳遞給方法是完全可以接受的(有些方法允許 null 參數,有些則不允許)。例如,你可能會寫
System.out.println (null)
,但butstring.compareTo (null)
它不會起作用。因此,如果不完全明顯,請務必在方法的 javadoc 註解中指出是否可以接受 null 作為其參數。 - 在 JDK 從 1.1 到 1.1.5 版本中,將 null 作為字面參數傳遞給匿名內部類別的建構函數(例如,
new SomeClass(null) { ...}
會導致編譯器錯誤)。但是,您可以傳遞值為 null 的表達式,或傳遞強制的空,形式為new SomeClass((String) null) { ...}
- 至少有三種不同的情況,通常使用 null 來表示:
- 未初始化(未初始化)。尚未指派任何值的變數或槽。
- 不存在/不適用。例如,二元樹的終端節點可以稱為具有空子節點的普通節點。
- 空 (某物的空虛)。例如,您可以使用 null 來表示空樹。請注意,這與前面的情況有很大不同(它們在實踐中經常被混淆)。差異在於 null 是否是可接受的樹節點,或者 null 是否表示該值不需要被視為樹節點。
-
// null означает «не применимо» // Здесь нет пустого дерева. class Node { Object data; Node left, right; void print() { if (left != null) left.print(); System.out.println(data); if (right != null) right.print(); } }
-
// 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); } }
-
// Отдельный класс для 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() { } }
比較二元樹節點的三種實作與順序控制台輸出方法:
GO TO FULL VERSION