Almost every java developer finds one fine morning that he cannot compare String with “==” as he has been doing with int or char . Presque tous les développeur Java trouve un beau matin qu'il ne peut pas comparer avec String "==" comme il l'a fait avec int ou char. Then either he finds out or someone kindly tells him that objects cannot be compared with “==”. Ensuite, soit il découvre ou quelqu'un de bien vouloir lui dit que les objets ne peuvent être comparés avec "==". He has to use equals(Object) method. Il doit utiliser equals (Object) méthode. 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. Mais rarement, sinon jamais, il se rend compte qu'il est possible d'utiliser == pour comparer deux cordes pour l'égalité. Il existe deux grandes s L'avantage d'être en mesure d'utiliser == pour la comparaison String - amélioration des performances et de réduction de l'utilisation de la mémoire.

To achieve this you need to call the magic method - intern() on a String. Pour ce faire vous devez appeler la méthode magique - intérieur () sur une chaîne de caractères.

String class internally maintains a private pool of strings which are initially empty. String maintient l'intérieur de la classe une piscine privée de cordes qui sont initialement vide.

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. Lorsque le stagiaire () est invoqué, si la piscine contient déjà une chaîne égale à cette chaîne objet tel que déterminé par le equals (Object) méthode, puis la chaîne de la piscine est de retour. Otherwise, this String object is added to the pool and a reference to this String object is returned. Sinon, cette chaîne objet est ajouté à la piscine et une référence à la présente String objet est de retour.

All literal strings and string-valued constant expressions are interned. Toutes les chaînes littérales et chaîne de valeur constante expressions sont internés.

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. Donc, si vous comparez un stagiaire ed String avec un autre stagiaire ed String String constante ou alors vous pouvez utiliser == au lieu de (ou en plus) est égal à: (Objet) méthode.

This is widely used while processing large XML documents where the tags are interned for faster comparison and lower memory consumption . Cela est largement utilisé lors du traitement de grands documents XML où les balises sont internées pour comparaison plus rapide et plus faible consommation de mémoire.

Update: Based two comments below by Christian and Markus, I re-evaluated the validity of touted performance benefit. Mise à jour: D'après deux commentaires ci-dessous par Christian et Markus, je ré-évalué la validité de vanté la performance. With JDK 1.5 (I tested with) there isn’t any performance difference between equals(Object) and == for String. Avec JDK 1.5 (je l'ai testé avec) il n'existe aucune différence de performance entre égaux (Objet) et == pour String. It is most likely because of equals implementation which first does a == comparison anyway as pointed out by Il est très probable que la mise en œuvre d'égal à égal qui a d'abord fait une comparaison == de toute façon, comme l'a souligné Markus Kohler Markus Kohler . Thanks for correcting me guys. Merci pour la correction moi les gars.

PS. It is amazing how Java is improving over the versions. Il est étonnant de constater à quel Java est l'amélioration de plus de versions. Several previous assumptions of performance are not valid anymore. Plusieurs hypothèses de rendement ne sont pas plus valables. There goes another. Il est un autre. I wonder when String concatenation with + operator will follow suit. Je me demande chaîne concaténation avec l'opérateur + suivront cet exemple.