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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  •                  String s1 = "ab";
  •                 String s2 = "abc";
  •                 String s3 = s1 + "c";
  •                 System.out.println(s3 == s2);// false
  •                 System.out.println(s3.equals(s2));// true
  equals 和 == 的区别,哪位大神能解释下,网上的回答简直让我看懵了。

19 个回复

正序浏览
一个比较的是地址值,一个比较的是值
回复 使用道具 举报
统一回复:感谢大家的耐心解答,问题得以解决。感谢!
回复 使用道具 举报
==是比较的地址值,而equals比较的是内容
回复 使用道具 举报

简直不能再直观了,感谢你的解答。谢谢
回复 使用道具 举报
==是比较引用对象指向的地制值是否相等,Equals是比较对象
回复 使用道具 举报
一般都这样说:equals在String类里面被重写了,所以对于String类来说,只要是字符串内容一样就是true,而==号比较的是数值,而String s3 = s1 + "c";会在常量池里面进行新的拼接并且创建一个新的对象赋值给s3,所以s3和s2的地址值不一样,所以是false
回复 使用道具 举报
equals在String类里面被重写了,所以对于String类来说,只要是字符串内容一样就是true,而==号比较的是数值,而String s3 = s1 + "c";会在常量池里面进行新的拼接并且创建一个新的对象赋值给s3,所以s3和s2的地址值不一样,所以是false
回复 使用道具 举报
本帖最后由 逝水大魔王 于 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
回复 使用道具 举报
看不懂。。。。。。
回复 使用道具 举报
观望一下,才没多久就有点模糊了
回复 使用道具 举报
.....我也就看看
回复 使用道具 举报
HeiMaZ 中级黑马 2016-5-24 22:24:05
9#
equals比较的是内容所以一样,另一个存储地址不同
回复 使用道具 举报
看图就懂了

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

2016-05-24_221913.png
回复 使用道具 举报
这个题是吧  ,你的看图 ,  
回复 使用道具 举报
昏了
我也看看
回复 使用道具 举报
罗勇 发表于 2016-5-24 22:04
==在比较引用类型的时候比较的是地址值所以为false,而equals方法重写后比较的是对象的属性,所以为true ...

好的,感谢!
回复 使用道具 举报
==在比较引用类型的时候比较的是地址值所以为false,而equals方法重写后比较的是对象的属性,所以为true
回复 使用道具 举报
equals是比较栈中存储的内容,而==是比较引用对象指向的地制值是否相等,比如String s1 = "ab"和String s2 = "abc";s1.equals(s2)比较的是它们的字符串内容,s1==s2比较的是它们指向的栈的地制值
回复 使用道具 举报
equals是比较栈中存储的内容,而==是比较引用对象指向的地制值是否相等,比如String s1 = "ab"和String s2 = "abc";s1.equals(s2)比较的是它们的字符串内容,s1==s2比较的是它们指向的栈的地制值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马