java StringBuffer和字符串比较

时间:2010-06-22 08:38:56

标签: java string

为什么String.equals()返回true但Stringbuilder.equals()返回false?

    StringBuffer sb1 = new StringBuffer("Amit");
    StringBuffer sb2= new StringBuffer("Amit");
    String ss1 = "Amit";
    String ss2 = "Amit";

System.out.println(sb1.equals(sb2)); //returns false
System.out.println(ss1.equals(ss2)); //returns true

THX

3 个答案:

答案 0 :(得分:3)

StringBuffer不会覆盖Object的equals()方法,因此只有在将StringBuffer对象与自身进行比较时才会返回true。

public boolean equals(Object obj) {
    return (this == obj);
}

要根据内容比较两个StringBuffers,请执行以下操作:

sb1.toString().equals(sb2.toString());

答案 1 :(得分:2)

StringBuffer没有定义equals方法,所以使用Object的equals方法,只有当它是同一个对象时才返回true。你可以做到

sb1.toString().equals(sb2.toString())

如果你想将它们比作字符串

答案 2 :(得分:0)

StringBuffer sb1 = new StringBuffer("Amit");
StringBuffer sb2= new StringBuffer("Amit");
String ss1 = "Amit";
String ss2 = "Amit";

System.out.println(sb1.equals(sb2)); //returns false
System.out.println(ss1.equals(ss2)); //returns true

在第一种情况下,sb1.equals(sb2),sb1和sb2将有两个不同的地址,因为它不会覆盖equals()方法。如果你真的想要进行比较,那么返回的是

sb1.toString().equals(sb2.toString())