2012-06-13 3 views
13

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

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

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

+6

Я удивлен, что 'StringBuilder' не объявляет свой собственный метод' equals'. – Jeffrey

+0

, что вы делаете, это лучший способ сделать это, запрещая большие объекты 'String'. –

ответ

26

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

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

+0

Это именно то, что делает sb1.equals (sb2). – jjm

+12

Нет, это абсолютно, совершенно, полностью ** НЕ НЕТ. ** –

+0

@jjm: У вас есть ссылка на исходный код, чтобы мы могли это проверить? – Gabe

3

Два объекта 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"); 
} 
+0

Но это не так эффективно, как вы создается новый экземпляр String. – alobodzk

0

Метод contentEquals() Строка.

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

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

s должен быть String, а не StringBuilder. –

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