null和""(空字符串)有什么区别?
null
""
我写了一些简单的代码:
String a = ""; String b = null; System.out.println(a == b); // false System.out.println(a.equals(b)); // false
两条语句都返回false。看来,我无法找到它们之间的实际区别。
“”是实际的字符串,尽管是空的。
但是,null表示String变量不指向任何内容。
a==b 返回false,因为“”和null不占用内存中相同的空间-换句话说,它们的变量不指向相同的对象。
a==b
false
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);
由于我分配了两个不同的对象,而a和b指向不同的对象,因此输出false。
但是,a.equals(b)在这种情况下将返回true,因为equals对于且仅当参数String不为null且表示相同的字符序列时, String才会返回true 。
但是请注意,Java对于字符串确实有特殊情况。
String a = "abc"; String b = "abc"; System.out.println(a==b);
你会认为输出为false,因为它应该分配两个不同的字符串。实际上,Java会实习文本字符串(在我们的示例中像a和b一样初始化的字符串)。因此请当心,因为这可能会给==的工作原理带来一些误报。