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

 


Dernière réponse
Sujet : [java] comparaison de chaine
wpk 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 :) )

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
wpk 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 :) )
oh_damned 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
gfive 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...
gfive 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) {
maitre_mulot 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
BifaceMcLeOD

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:

wouatouwouatou 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" );

wouatouwouatou 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.
haricovert Pour comparer j'utiliserais plutot la methode .equals() de la classe String ...
lamatrice le symbole ==
y fait pareil que comparTo() ou il y a une nuance
 
quel intéret, ? est du pareil au même ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)