黑马程序员技术交流社区

标题: 字符串问题 [打印本页]

作者: 习嘻嘻    时间: 2013-11-13 22:47
标题: 字符串问题
本帖最后由 习嘻嘻 于 2013-11-13 23:33 编辑

System.out.println(“”.equals(null));
为甚么是false
System.out.println(“abc”==”ab”+”c”);
为什么是true
作者: gh112233    时间: 2013-11-13 22:59
“”是空串。占用内存的。而null表示为空。不再占用内存,不同的概念。后面判断左右两侧都是字符串abc
作者: qq379264347    时间: 2013-11-13 23:12
本帖最后由 qq379264347 于 2013-11-13 23:18 编辑

""表示空的String类型,而null表示空,什么类型都没有,所以这俩比较自然是false。

下面的那个其实就是这样子的:
  String tmp = "ab" + "c";
  System.out.println("abc" == tmp);
tmp是"abc",==左面也是"abc",在JVM中相同的字符串只保留一份,除非你用new创建。tmp已经组装成"abc"了,下面的"abc"就是上面的副本,其实都一样的东西。
若是new一个就不同了,System.out.println("abc" == new String("abc"));输出false

作者: FFF    时间: 2013-11-13 23:15
""表示指向一个空的字符串,null表示为空,没有,指向了null特殊的空值。所以两个不相等。
ab+c实际是创建了新的对象“abc”,而内存中已经有一个“abc”了所以,他不再重新创建,而是直接指向了前面的"abc"。所以两者相等。为true。
作者: 绕世界流浪丶    时间: 2013-11-13 23:18
“”这个也算是个字符串, “ab"+"c"两个字符串相加第二个字符串就添加到第一个的末尾了。
作者: 习嘻嘻    时间: 2013-11-13 23:24
gh112233 发表于 2013-11-13 22:59
“”是空串。占用内存的。而null表示为空。不再占用内存,不同的概念。后面判断左右两侧都是字符串abc ...

谢谢,大概知道了
作者: 习嘻嘻    时间: 2013-11-13 23:24
qq379264347 发表于 2013-11-13 23:12
""表示空的String类型,而null表示空,什么类型都没有,所以这俩比较自然是false。

下面的那个其实就是这 ...

谢谢你,我知道了
作者: 习嘻嘻    时间: 2013-11-13 23:25
FFF 发表于 2013-11-13 23:15
""表示指向一个空的字符串,null表示为空,没有,指向了null特殊的空值。所以两个不相等。
ab+c实际是创建了 ...

谢谢,我要好好学习了
作者: 习嘻嘻    时间: 2013-11-13 23:25
绕世界流浪丶 发表于 2013-11-13 23:18
“”这个也算是个字符串, “ab"+"c"两个字符串相加第二个字符串就添加到第一个的末尾了。 ...

谢谢你的回答,努力吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2