黑马程序员技术交流社区

标题: 想问一下为什么第一条输出是false,而第二条又是true [打印本页]

作者: yuanqingleivip    时间: 2016-5-24 21:46
标题: 想问一下为什么第一条输出是false,而第二条又是true
  equals 和 == 的区别,哪位大神能解释下,网上的回答简直让我看懵了。

作者: lqy1991    时间: 2016-5-24 21:57
equals是比较栈中存储的内容,而==是比较引用对象指向的地制值是否相等,比如String s1 = "ab"和String s2 = "abc";s1.equals(s2)比较的是它们的字符串内容,s1==s2比较的是它们指向的栈的地制值
作者: lqy1991    时间: 2016-5-24 21:58
equals是比较栈中存储的内容,而==是比较引用对象指向的地制值是否相等,比如String s1 = "ab"和String s2 = "abc";s1.equals(s2)比较的是它们的字符串内容,s1==s2比较的是它们指向的栈的地制值
作者: 罗勇    时间: 2016-5-24 22:04
==在比较引用类型的时候比较的是地址值所以为false,而equals方法重写后比较的是对象的属性,所以为true
作者: yuanqingleivip    时间: 2016-5-24 22:12
罗勇 发表于 2016-5-24 22:04
==在比较引用类型的时候比较的是地址值所以为false,而equals方法重写后比较的是对象的属性,所以为true ...

好的,感谢!
作者: J_P    时间: 2016-5-24 22:13
昏了
我也看看
作者: kunwenli    时间: 2016-5-24 22:17
这个题是吧  ,你的看图 ,  
作者: kunwenli    时间: 2016-5-24 22:19
看图就懂了

2016-05-24_221913.png (105.53 KB, 下载次数: 26)

2016-05-24_221913.png

作者: HeiMaZ    时间: 2016-5-24 22:24
equals比较的是内容所以一样,另一个存储地址不同
作者: z736886202    时间: 2016-5-24 22:25
.....我也就看看
作者: ︶夜戏乀梦红尘    时间: 2016-5-24 22:29
观望一下,才没多久就有点模糊了
作者: 我有上将潘凤    时间: 2016-5-24 22:41
看不懂。。。。。。
作者: 逝水大魔王    时间: 2016-5-24 23:32
本帖最后由 逝水大魔王 于 2016-5-24 23:34 编辑

符串是常量值,储存在常量池中,String s1 ="ab";只是将常量池中的地址值赋给了s1,也就是s1的地址值是"ab",是指向常量池ab的,同理s2一样,但String s3 = s1 + "c";而这个时候s1是个变量,不是常量,所以是在堆内存而不是常量池中
String s3 = new( new s1 +"c");所以是这样的,故此s3 == s2是false,因为储存地址不一样,地址值也肯定不一样,而equls是比较的是他们在内存中的值的所以true
作者: 我love    时间: 2016-5-24 23:34
equals在String类里面被重写了,所以对于String类来说,只要是字符串内容一样就是true,而==号比较的是数值,而String s3 = s1 + "c";会在常量池里面进行新的拼接并且创建一个新的对象赋值给s3,所以s3和s2的地址值不一样,所以是false
作者: 18972877005    时间: 2016-5-24 23:39
一般都这样说:equals在String类里面被重写了,所以对于String类来说,只要是字符串内容一样就是true,而==号比较的是数值,而String s3 = s1 + "c";会在常量池里面进行新的拼接并且创建一个新的对象赋值给s3,所以s3和s2的地址值不一样,所以是false
作者: 大笑哈哈    时间: 2016-5-24 23:39
==是比较引用对象指向的地制值是否相等,Equals是比较对象
作者: yuanqingleivip    时间: 2016-5-25 19:11
kunwenli 发表于 2016-5-24 22:19
看图就懂了

简直不能再直观了,感谢你的解答。谢谢
作者: wz18706    时间: 2016-5-25 22:46
==是比较的地址值,而equals比较的是内容
作者: yuanqingleivip    时间: 2016-5-26 12:12
统一回复:感谢大家的耐心解答,问题得以解决。感谢!
作者: 徐方锐    时间: 2016-5-26 12:52
一个比较的是地址值,一个比较的是值




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