黑马程序员技术交流社区
标题:
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