如何比较StringBuffer对象的相等性

时间:2017-04-11 14:24:49

标签: java stringbuffer

 String s="";
StringBuffer sb2=new StringBuffer("hi"); 
StringBuffer sb3=new StringBuffer(sb2);
    StringBuffer sb4=sb3;

    if(sb2.equals(sb3))
    {
        System.out.println("sb2.equals(sb3):"+sb2.equals(sb3));
        s+="2 ";
    }


    if(sb3.equals(sb4))
    {
        System.out.println("sb3.equals(sb4):"+sb3.equals(sb4));
        s+="3 ";
    }

为什么首先是if给出false而第二个给出true,因为s2,s3,s4都是StringBuffer对象而String Buffer没有equal()方法?

4 个答案:

答案 0 :(得分:6)

Here's StringBuffer类的Javadoc,它将equals列为继承自类java.lang.Object的方法之一。

因此,它不会覆盖equals方法,这意味着Object类的equals方法用于比较两个StringBuffer对象。由于它只是检查引用(即使用==运算符),因此false得到sb2.equals(sb3)(它们是两个不同的Objects)。

Here's Javadoc for Object的equals方法,它说如下:

  

指示某个其他对象是否“等于”此对象。等于   method在非null对象上实现等价关系   参考

答案 1 :(得分:1)

StringBuffer不会覆盖equals(),因此它会继承Object的{​​{1}}实施,这与equals()基本相同。这意味着:

  • ==为false,因为sb2和sb3引用了不同的对象。
  • sb2.equals(sb3)为真,因为它们都引用同一个对象。

答案 2 :(得分:1)

所有其他类实际上是Object类的子类,因此StringBuffer是声明中Object的子类

如果查看它包含Object方法的.equals()类文档,如果对象具有相同的哈希码,则此方法返回true

如果查看StringBuffer类文档,它没有.equals()方法,因为它实际上继承了超类.equals()的{​​{1}}方法

答案 3 :(得分:1)

StringBuffer未覆盖equals方法。所有类都是Object.java的子类,因此StringBuffer的对象继承equals方法。 equalsObject.java中的实施基于==的结果考虑引用相等性,它只返回return (this == obj);,其中objequals的参数方法(public boolean equals(Object obj)

String.java会覆盖equals方法。您应该通过从String

获取StringBuffer对象来使用它

为了平等,您可以使用如下。

StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
if( (sb1.toString()).equals(sb2.toString())){
    System.out.println(" true ");
}else { 
   System.out.println(" false ");
}