StringBuilder 在比较两个具有相同值的 stringbuilder 对象时给我假值?

StringBuilder giving me false value while comapring two stringbuilder object with same value?

正如我所读,equals() 方法用于比较 java 中的字符串是否相等,但是当我 运行 这段代码时,我得到输出 false 。为什么?

public class TestStringBuilder {
 public static void main(String[] str){
    StringBuilder sb1= new StringBuilder("Hello World");
    StringBuilder sb2= new StringBuilder("Hello World");
    System.out.println(sb1.equals(sb2));
 }
}

在 String builder 中,因为没有覆盖 .equals() 方法,所以调用对象 .equals() 方法 这等同于对象引用而不是它的值。

虽然在字符串 class 中,这已被覆盖以比较每个位置的值,然后 return 结果

这是来自字符串 class 的重写 .equals() 方法,它不言自明为什么会这样

public boolean equals(Object anObject) {
       if (this == anObject) {
            return true;
       }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
           int n = count; //count is the length of return in the docs
            if (n == anotherString.count) {
                char v1[] = value;//The value is used for character storage.
               char v2[] = anotherString.value;
                int i = offset; //The offset is the first index of the storage that is used.
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                       return false;
               }
                return true;
            }
        }
        return false;
    }

您必须比较 StringBuilder 中包含的字符串而不是构建器本身:

System.out.println(sb1.toString().equals(sb2.toString()));

这将 return 为真

equals() 在字符串和原始包装器中被覆盖 类。它在 StringBuilder 中不是 ovrrriden,因此它检查相同的引用,这是错误的。