2010-10-07 10 views
7

¿Cuándo se debe comparar String s como objetos y cuándo se debe usar su método equals? Para estar seguro, siempre uso equals, pero eso no parece muy eficiente. ¿En qué situaciones puedo estar seguro de que string1 == string2 es seguro de usar?Comparación de cadenas y prácticas de cadenas en Java

Gracias!

+3

String.equals() es eficiente. Lo primero que se verifica es si string1 == string2. (En realidad Object.equals() comprueba esto.) –

+0

¡Pero por supuesto! Que estúpido de mi parte. Es una cosa muy obvia de hacer. Y muy eficiente como dices. Nunca pensé en eso. * ¡Qué vergüenza! * ¡Gracias! –

Respuesta

16

Usted debe casi siempre usar equals. Puede estar seguro de que va a funcionar si string1 == string2:

  • Usted ya se haya asegurado de que tenga valores distintos de alguna otra manera (por ejemplo, usted está utilizando valores de cadena obtienen de un conjunto, pero comparándolos para algunos otra razón)
  • usted sabe que está tratando con una cuerda en tiempo de compilación constantes de
  • te han internados manualmente las cuerdas a ti mismo

realmente no sucede muy a menudo, en mi experiencia.

+0

Gracias Jon, siempre pones las cosas de manera simple y clara. –

+1

Absolutamente la respuesta correcta. Usar '==' porque equals() es ineficiente es un gran ejemplo de optimización prematura. – DJClayworth

+0

Y String.intern() es lo suficientemente lento como para ser inútil para el rendimiento en la mayoría de los casos. – Darron

1

Por lo que sé de Java, string1==string2 solo será verdadero si las referencias a esos objetos son las mismas. Echar un vistazo al siguiente caso

String string1 = new String("Bob"); 
String string2 = new String("Bob"); 

string1 == string2; // false, they are seperate objects 
string1 = string2; // asigning string1 to string2 object 
string1 == string2; // true, they both refer to the same object 
+2

La primera comparación * * no será falsa porque * no * son objetos separados. Los literales de cadena están internados en Java. – sepp2k

+0

La primera comparación debería devolver falsa en este caso: String string1 = new ("Bob"); Cadena string2 = new ("Bob"); – stratwine

+0

Editaré mi respuesta para que esté más claramente definida. Pensé que podría encontrarme con este problema con Java. – Anthony

0

Sólo puede utilizar el == para la comparación si está seguro de los objetos son los mismos.

Por ejemplo, esto podría ocurrir si tuviera una variable de cadena estática final. Puede estar seguro de que una comparación sería entre el mismo objeto.

Se pega con el equals para la comparación de la secuencia.

Cuestiones relacionadas