黑马程序员技术交流社区
标题:
有没有大神教教啊,求解?
[打印本页]
作者:
南柯一梦境
时间:
2015-5-27 23:09
标题:
有没有大神教教啊,求解?
2. public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2);//false
System.out.println(s3 == "a" + "b");//true
复制代码
请问一下System.out.println(s3 == s1 + s2);//false这里怎么理解啊,原理是啥啊?真心不懂
作者:
l763631191
时间:
2015-5-27 23:29
本帖最后由 l763631191 于 2015-5-27 23:31 编辑
String s1 = "a"; 是一个对象
String s2 = "b"; 又一个对象
String s3 = "ab"; 又一个对象
此时内存中有3个字符串对象 所以内存中开辟了3个空间,有3个内存地址
所以s3 == s1 + s2 肯定是假的
"a" + "b"即为:“ab” 有了第4个对象 String s4=“ab”;
当字符串的内容一样时,就不会再开辟空间了而是把s3的字符串对象放在常量池中(位于共享区)。
s3 s4指向的都是同一个地址了,所以相等。
作者:
guoyangpeng
时间:
2015-5-28 06:22
受教了!
作者:
绝版坏银
时间:
2015-5-28 07:15
受教了。。
作者:
2119391569
时间:
2015-5-28 07:25
一楼正解,顶一个!
作者:
山崩地裂
时间:
2015-5-28 07:42
一楼正解,字符串好像都是存放在字符串常量池中的,
作者:
niuapp
时间:
2015-5-28 08:14
一楼说的好啊
作者:
kmlitheima
时间:
2015-5-28 10:03
把==改成equals就是跟你想象的变得一样了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2