Сравнение Java StringBuffer и String - PullRequest
1 голос
/ 22 июня 2010

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

    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 ]

3 голосов
/ 22 июня 2010

StringBuffer не переопределяет метод объекта equals () и, следовательно, возвращает true только при сравнении объекта StringBuffer с самим собой.

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

Чтобы сравнить два StringBuffers на основе их содержимого, сделайте что-то вроде этого:

sb1.toString().equals(sb2.toString());
2 голосов
/ 22 июня 2010

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

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

, если вы хотите сравнить их как строки

0 голосов
/ 22 июня 2010
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 (). Если вы действительно хотите сделать сравнение, которое вернет вам значение true

sb1.toString().equals(sb2.toString())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...