当前位置: 首页 > 面试题库 >

StringBuilder比较返回错误结果

徐涵亮
2023-03-14
问题内容

当我比较具有相同下划线字符串的两个StringBuilder对象时,false即使value应该为true也会返回。

public class Test {

    public static void main(String [] args) {
        StringBuilder strBld_1 = new StringBuilder("string");
        StringBuilder strBld_2 = new StringBuilder("string");

        System.out.println(strBld_1.equals(strBld_2));
    }
 }

问题答案:

这是因为StringBuilder不会覆盖类中的equals方法Object

您将必须将两个StringBuilder对象都转换为String,然后进行比较

System.out.println(strBld_1.toString().equals(strBld_2.toString()));

这将为您提供正确的结果。显然,您必须注意 null 检查等。

根据equals合同,如果覆盖equals,则hashCode也必须覆盖它们,但是由于StringBuffer可变,因此其值的任何更改都会影响对象的哈希码。HashMap如果StringBuilder用作键,可能会导致存储的值丢失。



 类似资料:
  • 在C语言中,为假,而为真。为什么不同? > 比较: 输出。 比较: 输出。 对于这两个代码片段,我期望。 为什么有这种差异?

  • 问题内容: 它应该返回1000,但是为什么返回5? 问题答案: 是。如果你用它乘,它会溢出类型(因为这的最大值可容纳是比少了很多),你会得到的。 然后,将结果除以,您将得到。 为了解决此问题,您需要明确指定乘法的结果将是-这是因为Java中的所有数字运算符都会产生整数,除非明确指示要产生其他数字类型。 只需在一些操作数上附加a 就足够了:

  • 我必须创建聚合,计算日期范围中包含的文档数量。我的查询如下所示: 间隔:604800000等于7天。 结果,我重新强调了这些: 您可以要求我的buckets从29/12/2016开始,但作为范围查询,不包括此日期。我希望我的桶应该从01/01/2017开始,正如我在范围查询中指出的那样。此问题仅发生在间隔天数大于1的查询中。在任何其他间隔的情况下,它工作得很好。我试了一天,几个月和几个小时,效果很

  • 我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。 有什么原因吗? 编辑: 以下是我的意思:

  • 问题内容: 比较器内部的返回值实际上是什么意思? 例如 : 如果返回类型为1,则其实际返回 [20、10、30、100] 如果返回类型为-1,则其实际返回 [100,30,10,20] 如果返回类型为0,则其实际返回 [20] 请告诉我这表示什么? 问题答案: 返回值(不是类型是)告诉调用者(对数据进行排序的事物): 如果始终为比较器返回相同的值(o,1,-1),而不管其输入如何,那么您使用的是错