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