null和""(空字符串)有什么区别?
null
""
我写了一些简单的代码:
String a = ""; String b = null; System.out.println(a == b); // false System.out.println(a.equals(b)); // false
两个语句都返回false。看来,我无法找到它们之间的实际区别。
false
”” 是一个实际的字符串,尽管是一个空字符串。
但是,null 意味着 String 变量不指向任何内容。
a==b返回 false 因为 “” 和 null 在内存中不占用相同的空间——换句话说,它们的变量不指向相同的对象。
a==b
a.equals(b)返回 false 因为 “” 显然不等于 null。
a.equals(b)
不同之处在于,由于 “” 是一个实际的字符串,您仍然可以在其上调用方法或函数,例如
a.length()
a.substring(0, 1)
等等。
如果 String 等于 null,比如 b,NullPointerException如果你尝试调用,Java 会抛出 a,比如:
NullPointerException
b.length()
如果您想知道的区别是 == 与 equals,那就是:
== 比较参考,就像我去了
String a = new String(""); String b = new String(""); System.out.println(a==b);
那将输出 false 因为我分配了两个不同的对象,并且 a 和 b 指向不同的对象。
但是,a.equals(b)在这种情况下会返回 true,因为当且仅当参数 String 不为 null 并且表示相同的字符序列时equals, for Strings 才会返回 true 。
equals
但请注意,Java 确实有字符串的特殊情况。
String a = "abc"; String b = "abc"; System.out.println(a==b);
你会认为输出是false,因为它应该分配两个不同的字符串。实际上,Java 将实习文字字符串(在我们的示例中初始化为 a 和 b 的字符串)。所以要小心,因为这会对 == 的工作方式产生一些误报。