Comparaison dans un If
Résolu
JrmC
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour à tous,
J'ai un petit problème au niveau du code de mon appli java.
Une comparaison dans un if ne fonctionne pas alors qu'elle est toute bête, et je ne sais pas pourquoi.
Le String statut me renvoi bien 'serveur' lorsque je le print pourtant.
J'ai vérifié et il n'y a pas d'espace devant ou derrière.
Est ce que ça peut venir d'autre chose ? Comme un problème d'encodage dans ma bdd ? Sachant que je recupère statut dans une base de donné en localhost sous mySQL.
Mon code:
String login = Textlog.getText();
char[] mot = Textmdp.getPassword();
String statut = log(login, mot);
System.out.println(statut);
if(statut != "error"){
System.out.println("OUI dif error");
if(statut == "serveur"){
System.out.println("OUI ifserveur");
Service serv = new Service();
serv.dessine();
}
else{
if(statut == "cuisinier"){
Cuisine cuis = new Cuisine();
cuis.dessine();
}
}
}
else{
System.out.println("Mauvais login ou mot de passe");
}
Mon affichage console:
serveur
OUI dif error
Merci pour vos futures réponses.
J'ai un petit problème au niveau du code de mon appli java.
Une comparaison dans un if ne fonctionne pas alors qu'elle est toute bête, et je ne sais pas pourquoi.
Le String statut me renvoi bien 'serveur' lorsque je le print pourtant.
J'ai vérifié et il n'y a pas d'espace devant ou derrière.
Est ce que ça peut venir d'autre chose ? Comme un problème d'encodage dans ma bdd ? Sachant que je recupère statut dans une base de donné en localhost sous mySQL.
Mon code:
String login = Textlog.getText();
char[] mot = Textmdp.getPassword();
String statut = log(login, mot);
System.out.println(statut);
if(statut != "error"){
System.out.println("OUI dif error");
if(statut == "serveur"){
System.out.println("OUI ifserveur");
Service serv = new Service();
serv.dessine();
}
else{
if(statut == "cuisinier"){
Cuisine cuis = new Cuisine();
cuis.dessine();
}
}
}
else{
System.out.println("Mauvais login ou mot de passe");
}
Mon affichage console:
serveur
OUI dif error
Merci pour vos futures réponses.
1 réponse
-
Bonjour,
L'opérateur==
va déterminer si l'objet est le même à gauche et à droite. En aucun cas il ne permet de déterminer si leur valeur est la même.
Ici, tu as un objet issu de la méthode log (statut) et un objet codé en dur dans le code ("serveur"), même s'ils ont la même valeur, ce sont deux objets distincts.
Pour comparer leur valeur, il faut utiliser la méthode equals de la classe Object.
if (statut.equals("serveur"))-
Haaa d'accord. J'étais sur que c'était un truc tout bête :-)
Donc l'opérateur == va comparer si deux variables sont des String par exemple ?
Merci beaucoup KX- "Donc l'opérateur == va comparer si deux variables sont des String par exemple ?"
Non, il va regarder si ce sont les deux mêmes objets, peu importe que ce soit des String ou autre chose, ce qu'il va regarder ce sont les références en mémoire de ces objets.
Exemples :
// cas général String a = "a"; String b = "b"; System.out.println(a==b); // false System.out.println(a.equals(b)); // false String a2 = a; System.out.println(a==a2); // true System.out.println(a.equals(a2)); // true String a3 = new String(a); System.out.println(a==a3); // false System.out.println(a.equals(a3)); // true Object obj = a; System.out.println(a==obj); // true System.out.println(a.equals(obj)); // true // spécifiquement pour les String String a4 = "a"; System.out.println(a==a4); // true System.out.println(a.equals(a4)); // true String a5 = a3.intern(); System.out.println(a==a5); // true System.out.println(a.equals(a5)); // true
-