Bonjour tous le monde,
Quelle est la meilleur maniére pour faire une comparaison des String
ou bienCode:myString == "uneValeur"
MerciCode:myString.equals("uneValeur");
Version imprimable
Bonjour tous le monde,
Quelle est la meilleur maniére pour faire une comparaison des String
ou bienCode:myString == "uneValeur"
MerciCode:myString.equals("uneValeur");
je ne suis pas une autorité en la maniere mais personellement j'aurai plutot tendance a utiliser la premiere si "une valeur" est une constante . Mais bon c'est surtout parce que dans ce cas je pense pas que je penserai a la deuxieme :aie:
Attention! :alerte:
Dans le cas d'une comparaison de la valeur de chaînes, il faut toujours utiliser la méthode equals.
L'opérateur == compare uniquement l'adresse mémoire des objets et peut donc renvoyer faux alors que la valeur des chaînes est identique.
Cf la FAQ java.
Bonjour,
Pour comparer les valeurs de deux String, il n'y a pas de choix (comme la dit deadpool).
mais une remarque :
pour comparer une contstant à une chaine il est préférable d'écrire :
en effet "uneValeur" ne peut être null ce qui evite les NullPointerExceptionCode:"uneValeur".equals(myString)
"uneValeur".equals(null) renvoie false ;)
merci a vous deux pour ces précision qui me conforte dans l'idée que je me serrai completement planté :aie:
finalement je pourrai dire que : "mon ignorance n'a d'égale que l'univers"
je me sens l'ame d'un poete aujourd'hui :aie:
La FAQ n'est pas tout a fait exacte sur ce point.
Dans l'exemple, on aura toujours a==b, quelque soit le compilateur. Les chaines de caractères du type "coucou" (les litteraux de type string) sont ajoutées automatiquement dans le pool des strings. Cela fait partie des specs java.
Pour avoir une difference, il faut plutot ecrire
Dire que le pool de strings est vide, est vrai mais inverifiable (à vrai dire, je ne vois pas trop l'interet de cette précision dans la javadoc). Parce que des le premier chargement de classe, tous les noms de methodes, d'attributs, de constantes de type chaine, de chaines vont être ajoutés à cette liste.Code:
1
2 String a = "coucou"; String b = new StringBuffer("coucou").toString();
Bref avant que le main s'execute, on peut sans hésitation affirmer que le pool de strings est déjà sacrement rempli.
Je confirme tout de même que la bonne méthode pour comparer deux chaines, c'est equals. Ce serait du machosisme d'utiliser une methode == qui ne marche que dans certains cas.
De toute façon dans l'implémentation de la méthodes equals de beaucoup de classes (dont celle de la classe String), on retrouve l'optimisation suivante:
Donc au final on s'y retrouve. ;)Code:
1
2
3
4
5
6
7 public void equals(Object otherObject){ if(this==otherObject){ return true; } //suite de la méthode }