2012-06-13 7 views
13

Beh, ho due oggetti StringBuilder, ho bisogno di confrontarli in Java. Un modo so che posso fare èChe cosa è un modo efficace per confrontare gli oggetti StringBuilder

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

ma questo significa che sto creando due oggetti String, c'è un modo migliore per confrontare gli oggetti StringBuilder. Probabilmente qualcosa in cui non hai bisogno di creare oggetti aggiuntivi?

+6

Sono sorpreso che 'StringBuilder' non dichiari il proprio metodo' equals'. – Jeffrey

+0

quello che stai facendo è il modo migliore per farlo, salvo eccedere grandi oggetti 'String'. –

risposta

26

Come a quanto pare già sapete, StringBuilder eredita equals() da java.lang.Object, e come tale StringBuilder.equals() restituisce vero solo quando passò lo stesso oggetto come argomento. Fa non confronta il contenuto di due StringBuilder s!

Se si guarda alla fonte, ti concludere che il paragone più efficiente (che non ha comportato la creazione di nuovi oggetti) sarebbe quello di confrontare .length() valori di ritorno, e poi se sono lo stesso, confrontare il restituire i valori di charAt(i) per ciascun carattere.

+0

Questo è esattamente ciò che fa sb1.equals (sb2). – jjm

+12

No, assolutamente, completamente, completamente ** NON. ** –

+0

@jjm: Hai un link al codice sorgente in modo che possiamo verificarlo? – Gabe

3

Due oggetti StringBuilder non sono mai uguali. Usa .toString() per ottenere la rappresentazione della stringa per entrambi gli oggetti e quindi usa .equals() per confrontare gli oggetti. In questo modo viene richiamato il metodo equals() dalla classe String che confronta il valore di stringa degli oggetti invece di confrontare la posizione di 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

Ma non è efficiente come te creare una nuova istanza String è allocata. – alobodzk

0

È possibile utilizzare il metodo contentEquals() della stringa.

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

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

s deve essere una stringa non un oggetto StringBuilder. –

Problemi correlati