Java String vs String Buffer

时间:2014-05-08 14:19:01

标签: java string stringbuffer

我有来自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?  它是否可以对物体的可变性做些什么?

2 个答案:

答案 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);