要理解null在 Java 中的含義,讓我們看一個與數字的類比:數字 0 表示缺少某物,而null在引用數據類型時表示相同的事物。如果引用類型(例如StringObjectStringBuilder)的字段未顯式分配值,則通過類比原始類型,它會收到一個默認值,該值為null

代碼 控制台輸出
public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
0

但是如果你像這樣聲明一個數組:

String[] strings = new String[12];

將創建一個包含 12 個元素的數組,所有元素都將為null

代碼 控制台輸出
public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
元素 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是一個保留關鍵字(如publicstatic ),因此您不能創建名為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