Как сравнить String и StringBuffer?

247
18 апреля 2017, 07:39

Нужно определить, является ли введенный текст палиндромом.
Палиндро́м — буквосочетание, слово или текст, одинаково читающееся в обоих направлениях.

String inputString = (new Scanner(System.in)).next();
StringBuffer reverseString = new StringBuffer(inputString);
reverseString.reverse();
System.out.println(inputString.equals(reverseString));

Как сравнить объекты String и StringBuffer?

Answer 1

Как сравнить объекты String и StringBuffer?

Для сравнения объектов классов String и StringBuffer их необходимо привести к одному виду.

В классе StringBuffer есть метод toString(), который отдает содержимое StringBuffer в виде объекта класса String. Далее можно сравнить две строки, используя метод equals(...):

System.out.println(inputString.equals(reverseString.toString()));

Почему мой вариант кода не заработал?

Давайте посмотрим реализацию метода String.equals(...):

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
  • Сначала производится сравнение ссылок, они у Вас, очевидно, разные.

  • Далее происходит проверка: является ли переданный объект объектом класса String. Так как Вы передаете StringBuffer, то anObject instanceof String возвращает false и сам метод equals(...) в итоге возвращает false.

PS. Есть еще класс StringBuilder, который идентичен классу StringBuffer за исключением того, что первый не синхронизирован (соответственно работает быстрее). Так что если Вы работаете в однопоточной среде, то целесообразно использовать StringBuilder вместо StringBuffer.

READ ALSO
Кастомные jpa update/delete query

Кастомные jpa update/delete query

Откуда код вызывается:

246
Путь к картинкам в JAR файле

Путь к картинкам в JAR файле

Собрал проект мавеном в JAR файлВнутри архива есть папка с картинками, однако не могу понять, как прописать путь к этим файлам так, чтобы можно...

289
Как решить систему ОДУ методом Рунге-Кутты 4 порядка? [требует правки]

Как решить систему ОДУ методом Рунге-Кутты 4 порядка? [требует правки]

Привет, хочу решить систему ОДУ методом Рунге-Кутты 4 порядкаПравильно ли реализован этот метод?

217