2012-06-13 9 views
13

Bueno, tengo dos objetos StringBuilder, necesito compararlos en Java. Una forma Sé que puedo hacer es¿Cuál es una forma eficiente de comparar objetos StringBuilder?

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

pero eso significa que estoy creando dos objetos String, ¿hay alguna manera mejor para comparar objetos StringBuilder. ¿Probablemente algo donde no necesitas crear objetos adicionales?

+6

Me sorprende que 'StringBuilder' no declare su propio método 'iguales'. – Jeffrey

+0

lo que está haciendo es la mejor manera de hacerlo, salvo que exceda los grandes objetos 'String'. –

Respuesta

26

Al parecer ya sabe, StringBuilder hereda equals() de java.lang.Object, y como tal StringBuilder.equals() devuelve true sólo cuando pasaron el mismo objeto como argumento. Hace no comparar el contenido de dos StringBuilder s!

Si mira la fuente, concluirá que la comparación más eficiente (que no implicó la creación de ningún objeto nuevo) sería comparar los valores de retorno .length(), y luego si son iguales, compare la devuelve los valores de charAt(i) para cada personaje.

+0

Esto es exactamente lo que hace sb1.equals (sb2). – jjm

+12

No, absolutamente, completamente, completamente ** NO. ** –

+0

@jjm: ¿Tiene un enlace al código fuente para que podamos verificar eso? – Gabe

3

Dos objetos StringBuilder nunca son iguales. Utilice .toString() para obtener la representación de cadena para ambos objetos y luego use .equals() para comparar los objetos. De esta forma, se invoca el método equals() de la clase String que compara el valor de la cadena de los objetos en lugar de comparar la ubicación de la memoria.

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

Pero eso no es eficiente como usted crear una nueva instancia de String se asigna. – alobodzk

0

Puede utilizar el método contentEquals() de String.

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

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

s necesita ser un String no un StringBuilder. –

Cuestiones relacionadas