Java String vs String Buffer
У меня есть следующие строки из кода 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
Я не могу понять, почему он печатает true для String Oject и false для объектов StringBuffer? Это связано с изменчивостью объектов?
2 ответа
StringBuffer
не переопределяет equals
так называет метод суперкласса Object
, Если вы хотите сравнить контент, используйте toString
метод
System.out.println(str3.toString().equals(str4.toString()));
Примечание с Java 1.5 StringBuffer
был заменен StringBuilder
как непоточная альтернатива
Поскольку 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);