Java 中的 Null 和空字串
本教程將討論 Java 中 null
和空字串之間的區別。但在此之前,我們將瞭解 null
和 empty
之間的基本區別。
Empty 就像一個空盒子,我們可以根據需要使用它來填充它或做需要。
Null 就像一個真空,帶有一些與之相關的屬性,因此我們既不能認為它是空的,也不能認為它是滿的。
在 Java 中,字串是指字元序列。例如,delftstack
是一個字串。
我們經常在 Java 中看到空字串和 null 字串。很多人認為空字串和空字串是一樣的,但是空字串和空字串是有區別的。
在 Java 中使用空字串
String a = ""; // empty string
這裡的 a
是一個空字串。當我們將空字串分配給 string
變數時,它表明 reference
變數引用了堆中字串的記憶體位置。
空字串是其中沒有字元的字串,它具有明確定義的長度長度為 0
。我們可以對空字串執行所有字串操作。
我們可以通過使用 length()
方法找到它的長度,找出一些字元的索引等。
在 Java 中使用空字串
String b = null;
這裡的 b
是一個空字串。將 null 分配給字串變數時,引用變數不引用堆中的任何記憶體位置。
空字串表示根本沒有字串。它沒有長度,因為它根本不是字串。
對空字串應用任何標準字串操作將導致 NullPointerException
執行時。
Java 中的空字串示例
在這個例子中,我們建立了一個空字串和一個空字串,然後我們使用 length()
方法檢查它們的工作情況。空字串會引發異常,而空字串不會。
請參見下面的示例。
public class SimpleTesting {
public static void main(String[] args) {
// empty string
String a = "";
// null string
String b = null;
// printing length of empty string
System.out.println("length a = " + a.length());
// this piece of code will still throw nullpointerexception .*
if (b != "") {
// printing length of null string
System.out.println("length b =" + b.length());
}
}
}
輸出:
length a = 0
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "<local2>" is null
at SimpleTesting.main(SimpleTesting.java:15)
使用 Java 中的 equals()
方法檢查 Null 和空字串
在這個例子中,我們使用了 equals()
方法和 equal ==
運算子來檢查空字串。表示式 a==b
將返回 false
,因為""
和 null
在記憶體中不佔用相同的空間。
簡單來說,我們可以說變數不指向同一個物件。a.equals(b)
將返回 false
,因為 a
和 b
指向的物件引用值不匹配。
b.equal(a)
將返回 NullPointerExpception
因為 b
指向一個模糊的引用,並且不允許任何操作。
public class SimpleTesting {
public static void main(String[] args) {
// empty string
String a = "";
// null string
String b = null;
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(b.equals(a));
}
}
輸出:
false
false
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "<local2>" is null
at SimpleTesting.main(SimpleTesting.java:13)