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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱玲均 黑马帝   /  2011-7-18 09:18  /  3152 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道当比较两个对象的时候,调用equals方法判断两个对象的值是否相等。

但是查阅API文档,为什么String类覆盖了Object类的equals方法,而StringBuffer类却没有覆盖Object类的equals方法?

要是判断两个StringBuffer对象的内容是否相等的时候,还要自己手写覆盖equals方法,这多麻烦。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 问得好!!

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-18 09:45:59
沙发

String类和StringBuffer类

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 所以比较的时候需要覆盖Object类的equals方法,而StringBuffer 是可变的,所以比较时要进行对象比较。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:21:21
藤椅
[font=Verdana][size=3]    equals方法是属于类String的,而不属于类StringBuffer。[/size][/font]
[font=Verdana][size=3]    因此equals方法就只能操作String类型的对象,而不能操作StringBuffer类型的对象。[/size][/font][font=Verdana][size=3]也就是StringBuffer里没有equals方法,如果直接使用是比较地址,可以在后面加上toString()即可,就可以比较对象的值了。[/size][/font]
[font=Verdana][size=3]   比如:StringBuffer sb1 =new StringBuffer("123");[/size][/font]
[font=Verdana][size=3]           StringBuffer sb2 =new StringBuffer("123");[/size][/font]
[font=Verdana][size=3]   判断:sb.toString().equals(sb2.toString)[/size][/font]
[font=Verdana][size=3][/size][/font]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:47:57
板凳
equals方法比较的是两个对象的类型是否相同并且对象的内容是否相同,
同时,应该在用这个方法之前,查看一下此方法是否重写了Object这个类的equals和hashcode方法。
StringBuffer类对这两个方法都没有重写。而String重写了这两个方法。
     正如楼上所说:可以用StringBuffer的toString方法来比较。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 新人报到,加分

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:57:18
报纸
你既然查了API文档就应该知道String 类是final修饰的,也就是说String类是不可变的,你想重写的机会都没有
StringBuffer 是没有实现线程安全的,性能高,每种情况实现equals标准不一,也就不需要提供,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马