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);
Другие вопросы по тегам