Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
838 connectés 

  FORUM HardWare.fr
  Programmation

  [java] comparaison de chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] comparaison de chaine

n°37823
lamatrice
Posté le 07-06-2001 à 16:01:25  profilanswer
 

le symbole ==
y fait pareil que comparTo() ou il y a une nuance
 
quel intéret, ? est du pareil au même ?

mood
Publicité
Posté le 07-06-2001 à 16:01:25  profilanswer
 

n°37877
haricovert
Posté le 07-06-2001 à 17:53:54  profilanswer
 

Pour comparer j'utiliserais plutot la methode .equals() de la classe String ...

n°37883
wouatouwou​atou
Posté le 07-06-2001 à 18:02:34  profilanswer
 

non...c pas pareil... :D
== compare les references des objets... et compareTo() compare leurs valeurs en indiquant si c < ou > ou egal.
equals() dit juste si les valeurs sont egales ou pas.


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°37885
wouatouwou​atou
Posté le 07-06-2001 à 18:07:24  profilanswer
 

fais deux instances de String() et fait les comparaisons et tu verras bien :D

Code :
  1. String s1 = new String("bonjour" );
  2. String s2 = new String("bonjour" );
  3. System.out.println("== " + ((s1==s2) ? "" : "pas" ) + " ok" );
  4. System.out.println("equals " + ((s1.equals(s2)) ? "" : "pas" ) + " ok" );
  5. System.out.println("== " + ((s1.compareTo(s2)==0) ? "" : "pas" ) + " ok" );


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°37909
BifaceMcLe​OD
The HighGlandeur
Posté le 07-06-2001 à 20:04:41  profilanswer
 

wouatouwouatou a écrit a écrit :

fais deux instances de String() et fait les comparaisons et tu verras bien :D

Code :
  1. String s1 = new String("bonjour" );
  2. String s2 = new String("bonjour" );
  3. System.out.println("== " + ((s1==s2) ? "" : "pas" ) + " ok" );
  4. System.out.println("equals " + ((s1.equals(s2)) ? "" : "pas" ) + " ok" );
  5. System.out.println("== " + ((s1.compareTo(s2)==0) ? "" : "pas" ) + " ok" );






Remarquez qu'il est possible que si l'on écrit :

Code :
  1. String s1 = "bonjour";
  2. String s2 = "bonjour";


le code ci-dessus puisse avoir un comportement différent... :crazy:

n°37941
maitre_mul​ot
Posté le 07-06-2001 à 23:09:01  profilanswer
 

moi j'ai eu l'experience ds un if de faire un s1 == s2 qui me renvoie faux alors que s1 et s2 contiennnent les mm caracteres, avec .equals ca marche.
ouala test

n°37951
gfive
Posté le 08-06-2001 à 00:17:41  profilanswer
 

c'est wouatouwouatou qui gagne le ponpon!! :D il a raison!!
 
Si tu fais par exemple :  
 
public static String TOTO = "toto";
 
public boolean compare(Sting s) {

n°37952
gfive
Posté le 08-06-2001 à 00:20:12  profilanswer
 

oops!! :D
donc :  
public boolean compare(Sting s) {  
return (s == TOTO);
}
 
compare(TOTO) donnera true,
mais compare("toto" ) donnera false.
 
et si tu fais String toto=TOTO;
compare(toto) donnera true...
 
Voila...

n°37953
oh_damned
Posté le 08-06-2001 à 00:39:53  profilanswer
 

String s1 = "foo";
String s2 = "foo";
 
s1 == s2;
 
si ceci renvoie faux c parce qu'à mon avis il y a ici comparaison entre les adresses des 2 chaines, ainsi s1 == s2 renvoie true uniquement si s1 et s2 désignent le même objet
 
s1.compareTo(s2) permet non seulement de tester l'égalité mais aussi de classer les chaînes dans l'ordre léxicographique, enfin bref pour tester l'égalité de 2 chaines, moi je fais :
 
s1.compareTo(s2) == 0

n°37955
wpk
Posté le 08-06-2001 à 00:46:48  profilanswer
 

juste un petit detail,
si vous trouvez que le comportement du == est bizare c'est a cause du lazy update :  
en fait, pour optimiser, la jvm ne recopie pas systematiquement les chaines de cara donc si a l'initialisation on a une chaine qui est identique a une autre, la reference de la 2eme pointera vers la 1ere. Faire le test avec == marche donc dans ce cas. Cependant, des qu'on effectue une modif sur une des chaines, la recopie est faite et les deux references deviennent differentes meme si par la suite les chaines de caracteres redevienent identiques.
Bon c'est ptetre pas tres clair mais la conclusion est qu'il faut toujours utiliser le equals pour comparer la valeur et == pour les references (c'est ce qui a ete dit d'ailleurs plus haut :) )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [java] comparaison de chaine

 

Sujets relatifs
[PHP] Comment tronquer une chaine ?[Java] Imprimer des pages Html qui st ds un JEditorPane
[JAVA - XALAN] bugMeilleur Outils de dev Java SVP!!!!
[java] dessin dans un canvas[JAVA] : importer du swing sous J++ ????
[java] utiliser JAXPJAVA 2 et Applet!!!!
API Java 3D[JAVA Bdd] Ozone
Plus de sujets relatifs à : [java] comparaison de chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR