黑马程序员技术交流社区

标题: String对象 [打印本页]

作者: 一直很安静    时间: 2013-11-23 17:38
标题: String对象
String s="a"+"b";
System.out.println(s=="ab");
结果为什么是true?不是每个字符串都是一个对象吗?且不会变 那我上面应该是两个对象啊?
作者: 中关村阿旺    时间: 2013-11-23 17:50
String s="a"+"b";这句代码是把s的指向变成了对象"ab"的内存地址,那么字符串常量池中就有"ab"这个对象了。
s=="ab",你这么判断,java虚拟机会到内存中找有没有"ab"这个对象,发现有,就不会创建"ab"对象了,然后再判断它们两个的内存地址是否相同,既然是一个对象,那么当然会返回true了。
作者: 够了没有    时间: 2013-11-23 17:50
因为代码String s="a"+"b";的结果实际上就相当于String s = "ab";
此时变量s就已经指向字符串“ab”了,也就是“ab”的地址值已经赋给了s。
先不管第二条代码,此时s=="ab"就已经为true了。
那么再看第二条代码System.out.println(s=="ab");就肯定为true了。
作者: mayor125    时间: 2013-11-23 18:08

String类型对象的内容是不可变的...
String a = "a"+"b";这个语句的意思是相当于在堆内存中开辟了两块空间,它们里面存储的内容分别是a和b,然后又开辟了第三块空间,存储的内容是ab,再将此空间的堆内存引用地址指向对象s,所以最终打印的结果是true。

用下图就可以很好的理解了:

2013-11-23_180611.jpg (26.73 KB, 下载次数: 21)

2013-11-23_180611.jpg

作者: 心的方向    时间: 2013-11-23 18:46
有图有真像
作者: FFF    时间: 2013-11-24 00:41
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~




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