Almost every java developer finds one fine morning that he cannot compare String with “==” as he has been doing with int or char . Casi todos los desarrolladores de Java se encuentra una multa por la mañana que él no se pueden comparar con String "==" como lo ha venido haciendo con char o int. Then either he finds out or someone kindly tells him that objects cannot be compared with “==”. A continuación, ya sea que se encuentre fuera o alguien que amablemente le dice que los objetos no se puede comparar con "==". He has to use equals(Object) method. Él tiene que utilizar es igual a (Objeto) método. However rarely, if ever, he realizes that it is possible to use == to compare two String for equality. There are two great The benefit s of being able to use == for String comparison - improved performance and memory usage reduction. Sin embargo rara vez, si acaso, se da cuenta de que es posible usar == para comparar dos String por la igualdad. Hay dos grandes s El beneficio de ser capaz de usar == para la comparación de cadenas - mejorar el rendimiento y la reducción de uso de memoria.

To achieve this you need to call the magic method - intern() on a String. Para lograr este objetivo es necesario que usted llame a la magia método - intern () en una cadena.

String class internally maintains a private pool of strings which are initially empty. String clase internamente mantiene una piscina privada de cadenas que son inicialmente vacía.

When the intern() method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Cuando el pasante () se invoca el método, si la piscina ya contiene una cadena igual a esta cadena como objeto determinado por la equals (Object) método, entonces la cadena de la piscina se le regresa. Otherwise, this String object is added to the pool and a reference to this String object is returned. De lo contrario, este objeto String se agrega a la piscina y una referencia a este objeto String se devuelve.

All literal strings and string-valued constant expressions are interned. Todas las cadenas de literales de cadena y un valor constante de expresiones son internados.

So if you compare an intern ed String with another intern ed String or String constant then you can safely use == instead of (or in addition to) equals(Object) method. Por lo tanto, si usted compara un interno ed String con otro interno ed String o String constante entonces usted puede utilizar con seguridad == en lugar de (o además de) equivale a (Objeto) método.

This is widely used while processing large XML documents where the tags are interned for faster comparison and lower memory consumption . Esto es ampliamente utilizado en el procesamiento de grandes documentos XML donde las etiquetas están internados más rápido para la comparación y el menor consumo de memoria.

Update: Based two comments below by Christian and Markus, I re-evaluated the validity of touted performance benefit. Actualización: la base por debajo de dos observaciones por Christian y Markus, volver a evaluar la validez de rendimiento promociona beneficio. With JDK 1.5 (I tested with) there isn’t any performance difference between equals(Object) and == for String. Con el JDK 1.5 (he probado con) no hay ninguna diferencia de rendimiento entre iguales (Objeto) y == para String. It is most likely because of equals implementation which first does a == comparison anyway as pointed out by Lo más probable es porque de igual aplicación que primero hace una comparación de todos modos == como señaló Markus Kohler Markus Kohler . Thanks for correcting me guys. Gracias por la corrección de los chicos me.

PS. PD. It is amazing how Java is improving over the versions. Es asombroso cómo Java es la mejora de más de las versiones. Several previous assumptions of performance are not valid anymore. Varios supuestos anteriores de rendimiento no son válidas ya. There goes another. Hay va otra. I wonder when String concatenation with + operator will follow suit. Me pregunto cuando concatenación de cadenas con + operador seguir su ejemplo.