当我比较具有相同下划线字符串的两个StringBuilder对象时,false即使value应该为true也会返回。
false
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
equals
Object
您将必须将两个StringBuilder对象都转换为String,然后进行比较
String
System.out.println(strBld_1.toString().equals(strBld_2.toString()));
这将为您提供正确的结果。显然,您必须注意 null 检查等。
根据equals合同,如果覆盖equals,则hashCode也必须覆盖它们,但是由于StringBuffer可变,因此其值的任何更改都会影响对象的哈希码。HashMap如果StringBuilder用作键,可能会导致存储的值丢失。
hashCode
StringBuffer
HashMap