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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ma464526717 中级黑马   /  2016-2-16 22:55  /  937 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5))
为什么是false而不是ture?求解答。

13 个回复

倒序浏览
本帖最后由 参禅悟道 于 2016-2-17 11:44 编辑

第一呢:s4:”你”前面多一个空格,s5:”好吗”前面也多一个空格,另外呢,java里面比较两个字符串不能用==,要用equals,你把空格去掉,比较的时候用s3.equals(s4+s5),就OK了。


解释:具体什么原因,需要你自己去理解查看,学会用百度动手一下就行了,你看一下这篇文章就知道了http://www.cnblogs.com/dolphin0520/p/3592500.html
回复 使用道具 举报
因为字符串变量后面跟“+”其实原理是在底层创建一个StringBuilder对象,再调用append方法添加"+"后面的数据,然后再调用toString方法返回String对象,在经过这一系列操作过程,s4+s5的地址指向的是String对象地址,而不是常量池中"abc"的地址
回复 使用道具 举报 1 0
用equals解答此问题
回复 使用道具 举报
因为==比较的是地址值。s3与s4的地址值不等于s5的地址值
回复 使用道具 举报
不能把s4+s5与Java的常量优化机制混淆。。
回复 使用道具 举报
因为==比较的是地址值
回复 使用道具 举报
看来大家都知道哈。。。都好厉害
回复 使用道具 举报
s4+s5是变量相加,如果是"你"+"好吗"=="你好吗"就是true了
回复 使用道具 举报
还有这么加的?一般不是用equals吗
回复 使用道具 举报
fagug 中级黑马 2016-2-19 01:20:31
11#
==比较的地址值,用equals()比较内容吧。。。。。。。。。
回复 使用道具 举报
(s4+s5)的值是地址值 “你好吗” s3指向的是是常量池中
回复 使用道具 举报
String是引用数据类型,==比较的是两者的地址值
回复 使用道具 举报
两个变量相加创建新的空间.==比较的是地址值.so..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马