Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme basique de comparaison

Sujet résolu
    16 décembre 2018 à 14:51:45

    Bonjour,

    je ne vois pas absolument pas pourquoi ce code retourne false false false, alors que pour moi il devrait retourner false true true puisque le comparateur == compare les références des deux rectangle et que equals compare chaque attribut un à un.

    Merci

    package test;
    
    public class test {
    	public static void main(String [ ] args) {
    		Person p1 = new Person("name", "surname");
    		Person p2 = new Person("name", "surname");
    
    		System.out.println(p1 == p2);
    		System.out.println(p1.equals(p2));
    		System.out.println(p2.equals(p1));
    	}
    }
    class Person {
        private String firstName;
        private String lastName;
    
        public Person(String fName, String lName) {
            firstName = fName;
            lastName = lName;
        }
    
    }
    
    


    • Partager sur Facebook
    • Partager sur Twitter
      16 décembre 2018 à 16:02:52

      Salut !

      Tu compares les deux personnes, ce qui est logique que cela ne fonctionne pas, si tu ne comprends pas qu'elles sont différentes, essaye de faire System.out.println(p1); et System.out.println(p2); tu verras que les deux valeurs sont différentes. Quand tu fais == tu cherches à savoir si les variables pointent vers le même objet (ils sont bien entendu différents). Pour tester si tes personnes sont les mêmes, il faut alors que tu fasses, dans ta classe principale une méthode qui retournerais si le prénom et le nom sont les mêmes que ceux que tu fournis en paramètre.

      Comme je suis d'humeur, je te passes à quoi devrait ressembler ton code (c'est à modifier à ta guise)

      package test;
       
      public class test {
          public static void main(String [ ] args) {
              Person p1 = new Person("name", "surname");
              Person p2 = new Person("name", "surname");
       
              System.out.println(isSame(p1.firstName,p1.lastName, p2.firstName, p2.lastName));
          }
      
          public boolean isSame(String 1fName, String 1lName,String 2fName, String 2lName){
          return (1fName.equals(2fName) && 1lName.equals(2lName));
      }
      }
      class Person {
          public String firstName;
          public String lastName;
       
          public Person(String fName, String lName) {
              firstName = fName;
              lastName = lName;
          }
      
      
       
      }



      • Partager sur Facebook
      • Partager sur Twitter
      "Le plus court chemin d'un point A à un point B : c'est de ne pas y aller"
        16 décembre 2018 à 16:11:00

        D'accord merci beaucoup, du coup ça veut dire que equals compare les références de chaque person or comme p1 et p2 ne pointent pas vers la même personne c est faux ( c est le même principe qu'avec ==).
        • Partager sur Facebook
        • Partager sur Twitter
          16 décembre 2018 à 18:52:57

          TTlaRage a écrit:

           à quoi devrait ressembler ton code

          C'est absolument pas à cela que son code devrait ressembler, il n'y aucune raison pour justifier le fait que ce soit la classe 'Test' qui verifie si deux personnes sont égales ou non. En fait le code proposer tout au début était bon et le raisonnement aussi, le truc c'est que tu dois redéfinir la méthode 'equals' pour qu'elle est le comportement souhaité, de base ( comme elle est implémenter dans la classe 'Object' ) cette méthode reviens à faire un '==' à peu de choses pret. 

          Du coup dans ta classe personne tu devrais avoir :

          public boolean equals(Object obj) {
              if (obj == null) return false;
              if (obj == this) return true;
              if (!(obj instanceof MyClass))return false;
              Personne pers = (Personne)obj;
              return pers.name.equals(this.name) && pers.surname.equals(this.surname);
          }

          Ce code devrait vérifier si 'pers.name' et 'pers.surname' sont différent de null

          • Partager sur Facebook
          • Partager sur Twitter
            16 décembre 2018 à 22:36:50

            D'accord parfait merci beaucoup !
            • Partager sur Facebook
            • Partager sur Twitter

            Probleme basique de comparaison

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown