黑马程序员技术交流社区

标题: String 的问题 [打印本页]

作者: 张庚    时间: 2013-2-1 12:06
标题: String 的问题
本帖最后由 张向辉 于 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)有什么不同的
作者: 陈科宇    时间: 2013-2-1 12:23
朋友,a是String对象,c是StringBuffer对象,两者是不同类型的对象,尽管它们包含相同的字符内容,对于equals方法而言,仍然是为false的。a和e的比较则不同,它们均属于String类型。java中,String的继承自Object的equals方法进行过重写,两个String对象的字符串内容子要相同,就可以判定为true。
作者: 陈科宇    时间: 2013-2-1 12:26
如果不明白,可以加上QQ讨论,String是特别有意思的类,值得深究。本人QQ:1612428643.
作者: 张庚    时间: 2013-2-1 12:31
{:soso_e144:}
作者: 陈科宇    时间: 2013-2-1 13:52
我会发一篇日志,专门讲一下我自己通过看资料对String的理解,如有兴趣,可以看一看。
作者: 王昕    时间: 2013-2-1 13:59
== 只是对比两个变量的字节组合是否相同,如果是比较引用的话,就是看两个引用是否指向同一个对象,两个引用指向同一个对象==的结果就是true。
equals()比较的是两个对象是否在“意义上”相等,这和对象类型有关。
a和e类型意义都相同,但不是指向同一个对象,所以==是false,equals()是true。a和c类型不同。
作者: 杨剑    时间: 2013-2-1 15:47
因为a是字符串对象,String类重写了equals方法,比较的是两个String类的对象的内容是否相等,a和e都是String类的字符串并且相等,所以a.equals(e)为true,而a是String类,c是StringBuffer类的,没有可比性,所以a.equals(c)为false。如果一个类中没有重写equals方法,用的方法都是Object类中的equals方法,默认比较的是两个对象是否相等。这时相当于==




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