A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近看到一下代码:
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
System.out.println(s3 == s1+s2);

控制台输出false;
不太明白,请大神指教。

评分

参与人数 1黑马币 +20 收起 理由
百里青山 + 20 加油!

查看全部评分

8 个回复

倒序浏览
String s1 = "a";   
String s2 = "b";
String str6 = s1 + s2;      
System.out.println(str6 == "ab");
步骤:  
1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a",
2) 栈中开辟一块中间存放引用s2,s2指向池中String常量"b",  
3) 栈中开辟一块中间存放引用str5,  
4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象,  
5) 引用str6指向堆中(s1 + s2)所还原的新String对象,  
6) str6指向的对象在堆中,而常量"ab"在池中,输出为false

不知道这样讲 ,你是否能看懂。。希望对你有帮助吧!
回复 使用道具 举报 1 0
Java-无招 发表于 2016-4-9 21:21
String s1 = "a";   
String s2 = "b";
String str6 = s1 + s2;      

原来是StringBuilder。
回复 使用道具 举报
==号是比较地址值的,
比较内容的是equals.如果改成s3.equals(s1+s2);就会输出true了
回复 使用道具 举报
赞一个额,各位大神,看完你们的我get到了不少之前一直模糊的知识!。
回复 使用道具 举报
张雄 发表于 2016-4-10 12:58
原来是StringBuilder。

6666666
回复 使用道具 举报
== 比较的是内存地址,equals比较的是对象属性值
回复 使用道具 举报
==比较的是地址值
回复 使用道具 举报
张雄 中级黑马 2016-4-14 16:10:26
9#
clvslyf 发表于 2016-4-10 23:20
==比较的是地址值

嗯,我知道这个是比较地址,那么s3==s1+s2;语句中的s1+s2加完了是一个地址值吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马