为什么返回false

lixiangyang1981 2003-10-20 09:21:34
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb1.equals(sb2));
...全文
68 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamhead 2003-10-27
  • 打赏
  • 举报
回复
我不觉得RomaticStone(Stone is singing)说的是个好办法,看一下,StringBuffer中toString的实现。

实际上它是构造了一个String对象,虽然Java是自动进行垃圾搜集,经常构造一个没有什么用的小对象也不是好的行为吧!

最根本的在于,StringBuffer的作用并不是为了比较而存在的,它只是一个BUFFER。
dreamhead 2003-10-26
  • 打赏
  • 举报
回复
dulang200x(独狼)的说法是正确的,可以查一下JDK中提供source,StringBuffer里面确实没有equals方法,如果调用equals方法,那么它就会调用Object中提供的equals方法,查一下Object的源码,可以看到:
public boolean equals(Object obj) {
return (this == obj);
}

也就是等同于==,实际上比较的是两个引用,相当于在C里面比较两个指针的地址。
所以,二者的结果是不同的。
RomaticStone 2003-10-26
  • 打赏
  • 举报
回复
the reason why StringBuffer doest not implement equals is it is a operational BUFFER which may dynamically allocate memory for storage.
RomaticStone 2003-10-26
  • 打赏
  • 举报
回复
normally, for StringBuffer, use the following

sb1.toString().equals(sb2.toString())

dulang200x 2003-10-22
  • 打赏
  • 举报
回复
楼上的说的不对
应该是
因为StringBuffer 没覆盖equals(),所以这里equals()跟==没什么区别,所以会返回false!
jhzhou882 2003-10-22
  • 打赏
  • 举报
回复
幸福鸟说的对
xingfuniao 2003-10-20
  • 打赏
  • 举报
回复
这是两个不同的对象,所以不同。
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = sb1;
System.out.println(sb1.equals(sb2));
这样就相同。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧