Java空字串和null的區別

2020-07-16 10:05:11
“”是一個長度為 0 且佔記憶體的空字串,在記憶體中分配一個空間,可以使用 Object 物件中的方法。例如:“”.toString() 等。

null 是空參照,表示一個物件的值,沒有分配記憶體,呼叫 null 的字串的方法會丟擲空指標異常。例如如下程式碼:

String str = null;
System.out.println(str.length());

new String() 建立一個字串物件的預設值為 "",String 型別成員變數的初始值為 null。

空字串 "" 是長度為 0 的字串。可以呼叫以下程式碼檢查一個字串是否為空:

if (str.length() == 0)

if (str.equals(""))

空字串是一個 Java 物件,有自己的串長度(0)和內容(空)。不過,String 變數還可以存放一個特殊的值,名為 null,這表示目前沒有任何物件與該變數關聯。要檢查一個字串是否為 null,要使用以下條件:

if (str == null)

有時要檢查一個字串既不是 null 也不為空串,這種情況下就需要使用以下條件:

if (str != null && str.length() != 0)

注意:首先要檢查 str 不為 null。如果在一個 null 值上呼叫方法,會出現錯誤。

範例如下:
public static void main(String[] args) {
    String str1 = new String();
    String str2 = null;
    String str3 = "";

    System.out.println(str3.length()); // 空字串""的長度為0
    System.out.println(str2.length()); // 丟擲空指標異常

    System.out.println(str1); // 輸出""
    System.out.println(str1 == str2); // 記憶體地址的比較,返回false
    System.out.println(str1.equals(str2)); // 值的比較,返回false
    System.out.println(str2 == str3); // 記憶體地址的比較,返回false
    System.out.println(str3.equals(str2)); // 值的比較,返回false
    System.out.println(str1 == str3); // 記憶體地址的比較,返回false
    System.out.println(str1.equals(str3)); // 值的比較,返回true
}