La comparaison des String est effectivement casse-gueule en Java.
L'opérateur= compare des types de base (int, double, ...).
La méthodeequals (présente dans la classe Object) sert à comparer des objets.
En l’occurrence, String est un objet.
Si tu utilise = pour comparer des String, tu compares leur référence, pas le contenu.
Si tu utilise equals, tu compares bien le contenu.
Alors parfois, le = fonctionne. Pourquoi ? L'explication est dans la doc) de String : un pool de String est maintenu par la classe. Quand tu en crée un nouveau est qu'il est dans le pool, alors c'est la même référence qui est utilisée. Sinon, c'est un autre objet.
Notamment : "a" == "a" peut retourner true ou false selon que "a" fait partie du pool ou pas new String("a") == new String("a") retourne toujours false (deux objets différents).
A noter que dans des langages de scripts comme Groovy, l'opérateur == est surchagé pour toujours faire .equals. En groovy, donc : new String("a") == new String("a") retourne toujours true.
[^] # Re: Les vrais ajouts
Posté par calvin2001 . En réponse au journal Java 7 est dispo !. Évalué à 2.
La comparaison des
Stringest effectivement casse-gueule en Java.L'opérateur
=compare des types de base (int, double, ...).La méthode
equals(présente dans la classe Object) sert à comparer des objets.En l’occurrence,
Stringest un objet.Si tu utilise
=pour comparer desString, tu compares leur référence, pas le contenu.Si tu utilise
equals, tu compares bien le contenu.Alors parfois, le
=fonctionne. Pourquoi ? L'explication est dans la doc) deString: un pool deStringest maintenu par la classe. Quand tu en crée un nouveau est qu'il est dans le pool, alors c'est la même référence qui est utilisée. Sinon, c'est un autre objet.(voir StackOverflow pour plus de détail).
Notamment :
"a" == "a"peut retourner true ou false selon que "a" fait partie du pool ou pasnew String("a") == new String("a")retourne toujours false (deux objets différents).A noter que dans des langages de scripts comme Groovy, l'opérateur
==est surchagé pour toujours faire.equals. En groovy, donc :new String("a") == new String("a")retourne toujours true.