有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

    sString,而sbStringBuilder,因此它们不相等。如果要检查它们的字符串表示(toString())是否相等,则必须直接执行以下操作:

    System.out.println(s.equals(sb.toString());
    
  2. # 2 楼答案

    我想补充一点StringBuilder不会重写equalshashcode方法。因此equals方法使用默认的对象标识比较。因此,2StringBuilder实例,如sb1sb2是相等的,当且仅当sb1==sb2为真

    StringBuilder sb1 = new StringBuilder();
    StringBuilder sb2 = sb1;
    
    if(sb1.equals(sb2){
      //they are equals
    }
    

    因此,在执行sb.equals(s)测试时,无法满足字符串equals方法对称契约

  3. # 3 楼答案

    为了解释为什么在后台打印这两个函数会做相同的事情:当您在StringBuilder对象上调用System.out.println时,它会自动为您在对象上调用toString方法

    因此,您可以这样给它您的StringBuilder对象:System.out.println(sb);,但它有效地(自动地)将其转换为System.out.println(sb.toString());

  4. # 4 楼答案

    sString,而sbStringBuffer。它们不是同一个对象,因此默认情况下,它们不能相等

    它对StringBuffer{a1}也没有帮助,因此StringBuilder对象将only ever be equivalent to its same instance

  5. # 5 楼答案

    这是因为String对象与StringBuilder对象不同

    你可能想要的是:

    s.equals(sb.toString())
    

    下面是String类的equals方法的样子:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) { // this condition is false for StringBuilder objects
               // some logic here
            }
        }
        return false;
    }
    

    取自openjdk

    如您所见equals方法将return false由于以下条件:

    if (anObject instanceof String)