Java字符串中null和空字符串("")之间的区别

187

空值(null)和空字符串("")有什么区别?

我写了一些简单的代码:

String a = "";
String b = null;

System.out.println(a == b); // false
System.out.println(a.equals(b)); // false

这两个语句都返回false。看来,我找不到它们之间的实际区别。


7
b.equals(a)相比较--但不要使用==进行字符串比较,因为在其他方面"它不起作用"。null值(与空字符串 "" 不同,后者是有效的 String 实例)永远不能调用方法。将“已知非空”的值(通常是常量或文字)放在等式的左侧被称为“Yoda 条件语句”或类似的东西。 - user166390
22个回答

0

很棒的答案,但我想从不同的角度给出我的观点。

String a = "StackOverflow";
String a1 = "StackOverflow" + "";
String a2 = "StackOverflow" + null;

System.out.println(a == a1); // true
System.out.println(a == a2); // false

因此,这可以告诉我们""和null指向不同的对象引用。


0

当你写下:

String a = "";

它意味着有一个类型为字符串的变量'a',它指向字符串池中具有值""的对象引用。由于变量a持有有效的字符串对象引用,因此可以在此应用字符串的所有方法。

而当你写下:

String b = null;

这意味着有一个类型为字符串的变量b,它指向一个未知的引用。对未知引用的任何操作都将导致NullPointerException

现在,让我们评估以下表达式。

System.out.println(a == b); // false. because a and b both points to different object reference

System.out.println(a.equals(b)); // false, because the values at object reference pointed by a and b do not match.

System.out.println(b.equals(a)); // NullPointerException, because b is pointing to unknown reference and no operation is allowed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接