Comparaison dans un If

Résolu/Fermé
JrmC - Modifié par JrmC le 9/01/2015 à 20:24
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 9 janv. 2015 à 20:50
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.
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 janv. 2015 à 20:34
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"))
0
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > JrmC
Modifié par KX le 9/01/2015 à 21:08
"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
0