Comparaison dans un If

Résolu
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.

1 réponse

  1. Modérateur
    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"))
    1. 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
    2. Modérateur
      @JrmC"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