StringBuffer使用==和equals的问题

xusihai 2009-06-17 08:10:02
StringBuffer sb=new StringBuffer("abc");
StringBuffer sb1=new StringBuffer("abc");
System.out.print(sb==sb1); //false
System.out.print(sb.equals(sb1)); //false

为什么用都输出false? 它们的值得不是相等吗,请问为什么?
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luffyke 2009-06-17
  • 打赏
  • 举报
回复
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较地址的,所以等于false.
lababawan 2009-06-17
  • 打赏
  • 举报
回复
重写equals的只有String类,File类和Date和所有的包装类
其他的要想比较必须重写equals方法
weiluo12 2009-06-17
  • 打赏
  • 举报
回复
sb==sb1------------------>false它们是两个不同对象,在内存的地址不同,==比较的是地址,所以是false。
sb.equals(sb1)----------->false(没重写超类object的equals方法)
api的解释:
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
cbynietg 2009-06-17
  • 打赏
  • 举报
回复

System.out.println(sb.toString()==sb1.toString()); //false

cbynietg 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cbynietg 的回复:]
StringBuffer 没有equals这个方法, 要把它toString之后才可以比较.
[/Quote]
错了, StringBuffer有equals这个方法.



StringBuffer sb = new StringBuffer("abc");
StringBuffer sb1 = new StringBuffer("abc");
System.out.println(sb.toString().equals(sb1.toString())); //true
System.out.println(sb.equals(sb1)); //false
System.out.println(sb==sb1); //false

ZangXT 2009-06-17
  • 打赏
  • 举报
回复
StringBuffer,StringBuilder两个类都没有重写equals方法,默认就是==
redlotus_lyn 2009-06-17
  • 打赏
  • 举报
回复
System.out.print(sb.toString().equals(sb1.toString()));
cbynietg 2009-06-17
  • 打赏
  • 举报
回复
StringBuffer 没有equals这个方法, 要把它toString之后才可以比较.
coolboybest 2009-06-17
  • 打赏
  • 举报
回复
这个类没有 重写 equals 方法 至相当于 Object的 方法
knightzhuwei 2009-06-17
  • 打赏
  • 举报
回复
我看了下源码 貌似stringbuffer没有重写equals方法 所以不能用来比较字符串是否相等
可以转成String来比较

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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