Что такое эффективный способ сравнения объектов 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");
}