Сравнивает ли метод StringBuffer equals содержимое?

Возможный дубликат:
Сравнение содержимого StringBuffer с равными

StringBuffer s1= new StringBuffer("Test");
StringBuffer s2 = new StringBuffer("Test");
if(s1.equals(s2)) {
  System.out.println("True");
} else {
  System.out.println("False");
}

Почему этот код печатает «False»?


person rocker    schedule 03.02.2010    source источник
comment
stackoverflow.com/questions/2012305/   -  person Mark    schedule 03.02.2010
comment
Метод equals() относится к классу Object. поэтому каждый класс имеет метод equals(), унаследованный от Object (базовый класс). Класс String переопределил метод equals() для точного сопоставления содержимого со строкой. StringBuffer не имеет переопределенного метода equals()   -  person Ravi1187342    schedule 03.10.2012


Ответы (2)


StringBuffer не переопределяет Object.equals, поэтому он не выполняет сравнение строк. Вместо этого он выполняет прямое сравнение объектов. Ваше условие также может быть if(s1==s2). Если вы хотите сравнить строки, вам нужно сначала превратить буферы в строки.

См. http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.html

Изменить: я предполагаю, что мы находимся в мире Java.

p.s. Если вы работаете в однопоточной среде или ваши буферы изолированы от одного потока, вам действительно следует использовать StringBuilder вместо StringBuffer.

person Michael Krauklis    schedule 03.02.2010
comment
Спасибо, Майкл, это действительно помогает мне..... - person rocker; 03.02.2010

StringBuffer equals не переопределяется для проверки содержимого. Он использует стандартное «неглубокое равенство», которое сравнивает ссылки, которые он наследует от java.lang.Object.

person duffymo    schedule 03.02.2010
comment
он перегружен или переопределен????? - person rocker; 03.02.2010
comment
переопределено или перегружено... нет, я выхожу :) - person gingerbreadboy; 03.02.2010