为了账号安全,请及时绑定邮箱和手机立即绑定

空和空(“)Java字符串的区别

空和空(“)Java字符串的区别

蝴蝶刀刀 2019-07-19 15:14:22
空和空(“)Java字符串的区别.之间的区别是什么?null而""(空字符串)?我写了一些简单的代码:String a = "";String b = null;System.out.println(a == b); // falseSystem.out.println(a.equals(b)); // false两个语句都返回false..看来,我找不到他们之间的实际区别。
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

“是一个实际的字符串,尽管是空字符串。

但是,NULL意味着字符串变量指向空。

a==b返回false,因为“和NULL不占用内存中相同的空间-换句话说,它们的变量不指向相同的对象。

a.equals(b)返回false,因为“显然不等于NULL。

不同之处在于,由于“是一个实际的字符串,所以仍然可以在其上调用方法或函数,例如

a.length()

a.substring(0, 1)

诸若此类。

如果字符串等于NULL,就像b一样,Java将抛出一个NullPointerException如果您试图调用,请说:

b.length()


如果您想知道的区别是=与相等,则如下所示:

=比较引用,就像我去

String a = new String("");String b = new String("");System.out.println(a==b);

这将输出false,因为我分配了两个不同的对象,而a和b指向不同的对象。

然而,a.equals(b)在本例中,将返回true,因为equals因为Strings将返回true当且仅当参数字符串不是NULL并且表示相同的字符序列。

但是,请注意,Java确实有字符串的特例。

String a = "abc";String b = "abc";System.out.println(a==b);

你会认为输出false,因为它应该分配两个不同的字符串。实际上,Java会实习生文字字符串(在我们的示例中初始化为a和b的字符串)。所以要小心,因为这可能会在=的工作方式上产生一些错误的结果。


查看完整回答
反对 回复 2019-07-19
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

你的陈述告诉你的只是“和NULL不一样-这是真的。“”为空字符串;NULL表示未分配任何值。

也许更有启发性的是:

System.out.println(a.length()); // 0
System.out.println(b.length()); // error; b is not an object

“仍然是一个字符串,意味着您可以调用它的方法并获得有意义的信息。NULL是一个空变量-实际上什么都没有。


查看完整回答
反对 回复 2019-07-19
  • 3 回答
  • 0 关注
  • 411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信