2012-04-26 2 views
0

Я создал два StringBuffer следующимStringBuffer объект Comparision

StringBuffer buffer1 = new StringBuffer("Text"); 
StringBuffer buffer2 = new StringBuffer(buffer1); 

Если сравнить эти StringBuffer с равным метод, то он возвращается ложь?

if (buffer1.equals(buffer2)) 
    System.out.println("true"); 
else 
    System.out.println("false"); 

Equals() сравнивает содержание string.So, я не знаю, что является причиной для возвращения ложной здесь ...

Пожалуйста Guide мне выйти из этой проблемы?

+0

Примечание. Также рекомендуем использовать StringBuilder вместо StringBuffer, если вам не нужно быть потокобезопасным. – Puce

+0

Это потому, что два буфера * не * равны. Если вы хотите сравнить равенство строк, которые содержат два буфера, тогда вам нужно будет использовать toString() в каждом буфере и сравнить результаты. – Jon

+1

'buffer1.equals (buffer2)' это то же самое, что и 'buffer1 == buffer2'. Вот почему вам приходится сравнивать контент String. –

ответ

3

Вы сравниваете объекты, а не текст. buffer1 является разной формой Буфер2

прочитан JDK ссылка методы равен

равенства метод реализует отношение эквивалентности на непустых ссылках на объекты:

Это рефлексивное: для любого ненулевого опорного значения х , x.equals (x) должно возвращать true. Он симметричен: для любых ненулевых опорных значений x и y x.equals (y) должен возвращать true тогда и только тогда, когда y.equals (x) возвращает true. Это транзитивно: для любых ненулевых опорных значений x, y и z, если x.equals (y) возвращает true, а y.equals (z) возвращает true, то x.equals (z) должно возвращать true. Это согласовано: для любых непустых опорных значений x и y несколько вызовов x.equals (y) последовательно возвращают true или последовательно возвращают false, если информация, используемая при равных сравнениях с объектами, не изменяется. Для любого ненулевого опорного значения х, x.equals (NULL) должен возвращать ложь. Метод equals для класса Object реализует наиболее различающееся возможное отношение эквивалентности для объектов; то есть для любых непустых опорных значений x и y этот метод возвращает true тогда и только тогда, когда x и y относятся к одному и тому же объекту (x == y имеет значение true).

Обратите внимание, что при переопределении этого метода, как правило, необходимо переопределить метод hashCode, чтобы поддерживать общий контракт для метода hashCode, который утверждает, что равные объекты должны иметь одинаковые хэш-коды.

5

StringBuffer.equals() НЕ сравнивает содержимое строки. Вы должны сделать toString().equals().

+2

toString() не getString(), но еще +1 – Puce

+0

вы правы! исправил мой ответ – adranale

3

Вы должны использовать toString().

if (buffer1.toString().equals(buffer2.toString()))<br> 
      System.out.println("true");<br> 
else<br> 
      System.out.println("false");<br>