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)