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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张庚 中级黑马   /  2013-2-1 12:06  /  1284 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-2-1 21:03 编辑

String a="abc";
  String b="abc";
  System.out.println(a==b);   //true
  System.out.println(a.equals(b));//true
  
  StringBuffer c=new StringBuffer("abc");
  StringBuffer d=new StringBuffer("abc");  
  System.out.println(c==d);   //false
  System.out.println(c.equals(b));//false
  
  String e=new String("abc");
  String f=new String("abc");
  System.out.println(e==f);  //false
  System.out.println(e.equals(f));  //true
  
  System.out.println(a==e);  //false
  System.out.println(a.equals(e));  //true
  
  System.out.println(a.equals(c));  //false

本以为彻底懂了== 与equals的区别  现在看来还没有
请问:上述代码 最后一行a.equals(c)为什么是false  他和a.equals(e)有什么不同的

评分

参与人数 1黑马币 +40 收起 理由
杨志 + 40

查看全部评分

7 个回复

倒序浏览
朋友,a是String对象,c是StringBuffer对象,两者是不同类型的对象,尽管它们包含相同的字符内容,对于equals方法而言,仍然是为false的。a和e的比较则不同,它们均属于String类型。java中,String的继承自Object的equals方法进行过重写,两个String对象的字符串内容子要相同,就可以判定为true。
回复 使用道具 举报
如果不明白,可以加上QQ讨论,String是特别有意思的类,值得深究。本人QQ:1612428643.
回复 使用道具 举报
{:soso_e144:}
回复 使用道具 举报
我会发一篇日志,专门讲一下我自己通过看资料对String的理解,如有兴趣,可以看一看。
回复 使用道具 举报
== 只是对比两个变量的字节组合是否相同,如果是比较引用的话,就是看两个引用是否指向同一个对象,两个引用指向同一个对象==的结果就是true。
equals()比较的是两个对象是否在“意义上”相等,这和对象类型有关。
a和e类型意义都相同,但不是指向同一个对象,所以==是false,equals()是true。a和c类型不同。
回复 使用道具 举报
因为a是字符串对象,String类重写了equals方法,比较的是两个String类的对象的内容是否相等,a和e都是String类的字符串并且相等,所以a.equals(e)为true,而a是String类,c是StringBuffer类的,没有可比性,所以a.equals(c)为false。如果一个类中没有重写equals方法,用的方法都是Object类中的equals方法,默认比较的是两个对象是否相等。这时相当于==
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马