我有来自Java代码的以下几行
{
String str1=new String("Vivek");
String str2=new String("Vivek");
StringBuffer str3=new StringBuffer("Vivek");
StringBuffer str4=new StringBuffer("Vivek");
System.out.println(str1.equals(str2));
System.out.println(str3.equals(str4));
}
现在我得到如下输出
True
False
我无法理解为什么它对String oject打印为true而对StringBuffer对象打印为false? 它是否可以对物体的可变性做些什么?
答案 0 :(得分:4)
StringBuffer
不会覆盖equals
,因此请调用超类Object
的方法。
如果您想比较内容,请使用toString
方法
System.out.println(str3.toString().equals(str4.toString()));
注意由于Java StringBuffer
已被StringBuilder
取代为非线程替代
答案 1 :(得分:1)
因为类equals
中的String
已被覆盖以比较内容,而类equals
中的StringBuffer
仍继承自比较地址的类Object。
两者都有javadoc,你会了解更多。
在String.equals
:
Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.
Overrides: equals(...) in Object
Parameters:
anObject The object to compare this String against
Returns:
true if the given object represents a String equivalent to this string, false otherwise
See Also:
compareTo(String)
equalsIgnoreCase(String)
您可以使用:
str3.toString().equals(str4);