Что такое эффективный способ сравнения объектов StringBuilder

Ну, у меня есть два объекта StringBuilder, мне нужно сравнить их на Java. Один из способов, который я знаю, я могу сделать, это

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

но это означает, что я создаю два объекта String, есть ли лучший способ сравнить объекты StringBuilder. Возможно, что-то, где вам не нужно создавать дополнительные объекты?

Ответы

Ответ 1

Как вы уже знаете, StringBuilder наследует equals() от java.lang.Object, и как таковой StringBuilder.equals() возвращает true только при передаче того же объекта, что и аргумент. Он не сравнивает содержимое двух StringBuilder s!

Если вы посмотрите на источник, вы сделаете вывод, что наиболее эффективное сравнение (не связанное с созданием каких-либо новых объектов) было бы сравнить возвращаемые значения .length(), а затем, если они будут одинаковыми, сравните возвращаемые значения charAt(i) для каждого символа.

Ответ 2

Два объекта StringBuilder никогда не равны. Используйте .toString(), чтобы получить строковое представление для обоих объектов, а затем используйте .equals() для сравнения объектов. Таким образом вызывается метод equals() из класса String, который сравнивает строковое значение объектов, а не сравнивает расположение памяти.

StringBuilder a= new StringBuilder("HELLO JAVA");
StringBuilder b= new StringBuilder("HELLO JAVA");
if (a.toString().equals(b.toString())){
System.out.println("Objects are equal");
}

Ответ 3

Вы можете использовать метод contentEquals() для String.

StringBuilder s = new StringBuilder("abc");
StringBuilder t = new StringBuilder("def");

if(s.contentEquals(new String(t)) {
    System.out.println("Same");
}