2009-05-08 39 views

Respuesta

28

equalsIgnoreCase puede ser mucho más rápido. Por ejemplo, considere dos cadenas que comienzan con los mismos 10.000 caracteres, pero una de ellas tiene un carácter adicional al final. equalsIgnoreCase puede devolver inmediatamente; compareToIgnoreCase tiene que iterar hasta el final de la cadena para ver la diferencia.

Pero en general iría con lo que exprese mejor su intención. Esto también funciona bien para el rendimiento: asumiendo que estoy en lo cierto al decir que equalsIgnoreCase es al menos tan rápido como compareToIgnoreCase, significa que debe usar eso donde pueda; si necesita un pedido real, debe usar compareToIgnoreCase de todos modos.

+0

@Downvoter: ¿Te importa dar una razón? –

+0

equalsIgnoreCase() tiene algunas diferencias cruciales para compararToIgnoreCase(). Para 1, prueba == igualdad primero antes de ver realmente si todos los caracteres son iguales. CompareTo siempre hará una comparación completa de los personajes, pero no tendrá en cuenta la configuración regional. Entonces realmente necesita saber qué comparación usar y luego compararla. –

10

si usted se preocupa actuaciones ... midas, porque es

+1

¡Demasiado fácil! ¡Tiene que haber una manera de perder el tiempo de la gente! – Bombe

+0

de hecho, muy buena respuesta, ¿verdad? – dfa

+4

En realidad, es muy fácil llegar a conclusiones erróneas utilizando la medición en este caso, ya que el resultado depende mucho de lo que mida exactamente. Es bueno obtener algo de información primero, ver la respuesta de Jon Skeet como un buen ejemplo. –

4

En cuanto a la fuente de java.lang.String

public boolean equalsIgnoreCase(String anotherString) { 
    return (this == anotherString) ? true : 
      (anotherString != null) && (anotherString.count == count) && 
     regionMatches(true, 0, anotherString, 0, count); 
} 

Por lo tanto, antes de que se ve en el carácter cadena real de caracteres (que también sucede de una manera similar para compareToIgnoreCase), equalsIgnoreCase también comprueba referencia identidad y longitud del personaje, que podría ser mucho más rápido.

+0

O podría ser una pérdida de tiempo cuando la mayoría de las cadenas son diferentes :) –

+0

seguro, es una solución de compromiso. Pero estas dos comparaciones son muy rápidas, así que no pierdes mucho. Y la comparación de longitud debería ser bastante efectiva (detectar muchas cadenas diferentes muy rápidamente). – Thilo

Cuestiones relacionadas