小编典典

StringBuilder比较返回错误结果

java

当我比较具有相同下划线字符串的两个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));
    }
 }

阅读 225

收藏
2020-11-26

共1个答案

小编典典

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

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

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

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

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

2020-11-26