要理解null在 Java 中的含義,讓我們看一個與數字的類比:數字 0 表示缺少某物,而null在引用數據類型時表示相同的事物。如果引用類型(例如String、Object或StringBuilder)的字段未顯式分配值,則通過類比原始類型,它會收到一個默認值,該值為null:
代碼 | 控制台輸出 |
---|---|
|
0
空 |
但是如果你像這樣聲明一個數組:
String[] strings = new String[12];
將創建一個包含 12 個元素的數組,所有元素都將為null:
代碼 | 控制台輸出 |
---|---|
|
元素 0:null
元素 1:null 元素 2:null 元素 3:null 元素 4:null 元素 5: null 元素 6:null 元素 7:null 元素 8:null 元素 9:null 元素 10:null 元素 11:null |
如您所見,當與字符串連接時,值null變為字符串“ null ”。也就是說,如果您對其調用toString()方法,如下所示:
String[] strings = null;
System.out.println(strings.toString());
然後你會得到一個NullPointerException(我們稍後會詳細討論異常)。如果您嘗試對null調用任何其他方法,也會發生同樣的事情(靜態方法除外,您很快就會了解):
public static void main(String[] args) {
StringBuilder sb = null;
sb.append("test"); // This will compile, but there will be a runtime error
}
null是一個保留關鍵字(如public或static ),因此您不能創建名為null 的變量、方法或類。與其他關鍵字一樣,此關鍵字區分大小寫(您可能已經註意到我們在所有地方都將null寫為小寫)。這意味著:
String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile
讓我們看看您還可以用null做什麼和不能做什麼:
-
您可以將null分配給任何引用:
StringBuilder sb = null;
-
null可以轉換為任何引用類型:
String s = (String) null; // This will compile, but doing this doesn't make any sense :)
-
null不能分配給原始變量:
int i = null; // This won't compile
-
null可以使用==和!=進行比較
-
null == null返回true
在前面的課程中,我們談到了 Java 中的一切都是對象,並且每個對像都有一個類型。
在這方面我們可以對null說些什麼?null是某種類型的文字,這種類型沒有名字。由於此類型沒有名稱,因此無法聲明此類型的變量或對其進行強制轉換。因此,null是此未命名類型的唯一代表。在實踐中,我們可以忽略這種類型,將null視為一種特殊的文字,可以分配給任何引用變量。
要記住的事情:
- null是引用數據類型的默認值
- null表示“沒有價值”
- 如果我們在值為null的對像上調用任何方法,代碼將編譯但在運行時我們將得到NullPointerException。
GO TO FULL VERSION