2010-06-22 3 views
1

Почему String.equls() возвращает true, но Stringbuilder.equals() возвращает false?java StringBuffer и String Сравнение

StringBuffer sb1 = new StringBuffer("Amit"); 
    StringBuffer sb2= new StringBuffer("Amit"); 
    String ss1 = "Amit"; 
    String ss2 = "Amit"; 

System.out.println(sb1.equals(sb2)); //returns false 
System.out.println(ss1.equals(ss2)); //returns true 

Thx

ответ

3

StringBuffer не отменяет равных Объекта() метод, и, таким образом, он возвращает истину только тогда, когда объект StringBuffer, сравнивается с самим собой.

public boolean equals(Object obj) { 
    return (this == obj); 
} 

Для сравнения двух StringBuffers в зависимости от их содержания, сделать что-то вроде этого:

sb1.toString().equals(sb2.toString()); 
+0

Тогда как мне сравнить как объекты String? – JavaUser

+0

Последующие действия для JavaUser: [Документация по StringBuffer] (http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html) - как вы можете видеть метод 'equals' не перекрывается в StringBuffer (внизу списка методов есть «Методы, унаследованные от класса java.lang.Object», который содержит «equals»), таким образом вы можете наблюдать, что поведение StringBuffer # equals равно [Object # equals ] (http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals (java.lang.Object)) – 2010-06-22 08:46:20

+0

@JavaUser Вы можете найти документацию для String таким образом а также отметить, что [String # equals] (http://java.sun.com/javase/6/docs/api/java/lang/String.html#equals (java.lang.Object)) говорит о себе , – 2010-06-22 08:47:40

2

StringBuffer не определяет приравнивает метод, так Object «s равно метод используется, который только возвращается true, если это тот же объект. Вы можете сделать

sb1.toString().equals(sb2.toString()) 

, если вы хотите, чтобы сравнить их Струны

0
StringBuffer sb1 = new StringBuffer("Amit"); 
StringBuffer sb2= new StringBuffer("Amit"); 
String ss1 = "Amit"; 
String ss2 = "Amit"; 

System.out.println(sb1.equals(sb2)); //returns false 
System.out.println(ss1.equals(ss2)); //returns true 

В первом случае sb1.equals (SB2), sb1 и sb2 будет иметь два разных адреса, потому что не отменяет equals(). Если вы действительно хотите сделать сравнение, которое возвращает вас, это значение

sb1.toString().equals(sb2.toString()) 
+0

hashcode здесь не имеет значения. – unbeli

+0

@unbeli: Должно быть, это были адреса. Спасибо .. исправил ответ – bragboy

Смежные вопросы