黑马程序员技术交流社区

标题: ==的使用 [打印本页]

作者: ma464526717    时间: 2016-2-16 22:55
标题: ==的使用
String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5))
为什么是false而不是ture?求解答。
作者: 参禅悟道    时间: 2016-2-17 11:41
本帖最后由 参禅悟道 于 2016-2-17 11:44 编辑

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


解释:具体什么原因,需要你自己去理解查看,学会用百度动手一下就行了,你看一下这篇文章就知道了http://www.cnblogs.com/dolphin0520/p/3592500.html

作者: j6819236    时间: 2016-2-17 19:53
因为字符串变量后面跟“+”其实原理是在底层创建一个StringBuilder对象,再调用append方法添加"+"后面的数据,然后再调用toString方法返回String对象,在经过这一系列操作过程,s4+s5的地址指向的是String对象地址,而不是常量池中"abc"的地址
作者: zhanganping    时间: 2016-2-17 21:22
用equals解答此问题
作者: hekaikai    时间: 2016-2-17 21:47
因为==比较的是地址值。s3与s4的地址值不等于s5的地址值
作者: ChiCaoMa    时间: 2016-2-17 22:42
不能把s4+s5与Java的常量优化机制混淆。。
作者: liuxiaoye    时间: 2016-2-17 22:53
因为==比较的是地址值
作者: 晓寒轻    时间: 2016-2-18 18:11
看来大家都知道哈。。。都好厉害
作者: WestdoorEmperor    时间: 2016-2-18 18:37
s4+s5是变量相加,如果是"你"+"好吗"=="你好吗"就是true了
作者: 苍山雪    时间: 2016-2-18 21:14
还有这么加的?一般不是用equals吗
作者: fagug    时间: 2016-2-19 01:20
==比较的地址值,用equals()比较内容吧。。。。。。。。。
作者: 李岳珉    时间: 2016-2-19 08:17
(s4+s5)的值是地址值 “你好吗” s3指向的是是常量池中
作者: 糊涂真好    时间: 2016-2-19 11:04
String是引用数据类型,==比较的是两者的地址值
作者: 安卓必备    时间: 2016-2-19 18:24
两个变量相加创建新的空间.==比较的是地址值.so..




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