Java——StringBuffer 不能直接使用equals比较两个对象是否相等

重拾Java基础了,StringBuffer由于没有重写equals方法,所以还是使用的Object的equals方法。对比的是两个对象的地址是否相等。而String 由于重写了equals方法,所以可以直接使用equals函数,对比两个对象是否相等。
源码如下:

object类的equals方法:

   public boolean equals(Object obj) {
        return (this == obj);
    }



String 类重写的equals方法:

   public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }```

测试代码

public class Test2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    StringBuffer sBuffer = new StringBuffer("1111");
    StringBuffer sBuffer2 = new StringBuffer("1111");
    String string = new String("1111");
    String string2 = new String("1111");

    System.out.println(sBuffer.equals(sBuffer2));
    System.out.println(string.equals(string2));
}

}

false
true

所以调用stringbuffer的equals方法的时候记得先toString();
Basillee wechat