为什么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
答案 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())