Partage
  • Partager sur Facebook
  • Partager sur Twitter

le double égale vs equals

== et equals

Sujet résolu
    25 janvier 2012 à 16:57:40

    bonjour,
    d'apres ce que j'ai lu dans certains forums,la differnce entre == et equals,ce que le double égale permet de comparer l'adress memoir de deux objets tandis que equals nous servis de comparer le contenu,ma question est la suivante,si on instancie deux objet de la même classe,est ce qu'ils vont partager la même adresse mémoire ,et ma seconde question :-° pourquoi ce bout du code ne marche pas
    var1.a.equals(var2.a)
    

    sachant que a est de type int et var1 et var2 sont instanciés de la même classe !!
    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      25 janvier 2012 à 17:00:46

      Pour le code qui ne fonctionne pas, tu peux commencer par vérifier les modificateurs de tes attributs pour la classe qui instancie var1 et var2.

      • Partager sur Facebook
      • Partager sur Twitter
        25 janvier 2012 à 17:04:14

        Ferterps,pour le code lorsque j'utilise des autre variable de type String,ça passe parfaitement !!
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          25 janvier 2012 à 17:14:22

          Le message d'erreur est ?
          Les modificateurs de tes attributs sont ?

          Pour comparer deux int, == peut convenir je pense, sauf peut-être si tu as une contrainte ?
          • Partager sur Facebook
          • Partager sur Twitter
            25 janvier 2012 à 17:45:36

            Déjà, je doute que a soit un int car equals n'existe pas sur les type primitifs, sinon c'est que tu n'utilise pas d'IDE car autrement il t'aurait souligné tous ça en rouge.
            En plus si var1 et var2 font tous les 2 un new il ne sont pas a la même adresse car une instance occupe une adresse mémoire.
            • Partager sur Facebook
            • Partager sur Twitter
              25 janvier 2012 à 18:31:24

              Deux instances d'un objet ne peuvent pas avoir la même adresse mémoire. Personne d'autre que toi n'habite au même numéro que toi dans la même rue dans la même ville du même pays, c'est pareil pour les adresses mémoires.

              Ensuite pour la comparaison, on compare les types primitifs (int, double, char...) avec ==, alors que la méthode equals() est pour les objets. Les chaînes de caractères sont des objets String, c'est pour ça qu'on utilise equals pour la comparaison et pas ==.
              • Partager sur Facebook
              • Partager sur Twitter
              ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                25 janvier 2012 à 19:10:10

                T'as raison répète histoire que ça soit bien clair!! :D
                • Partager sur Facebook
                • Partager sur Twitter
                  25 janvier 2012 à 19:15:39

                  J'ai surtout été plus précis :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                  ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                    25 janvier 2012 à 19:37:04

                    merci les gars pour les explications :D
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 janvier 2012 à 19:50:46

                      Integer a = 1;
                      Integer b = 1;
                      Integer c = 999;
                      Integer d = 999;
                      System.out.println(a == b);
                      System.out.println(c == d);
                      


                      Vous avez 10 minutes :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 janvier 2012 à 8:04:48

                        La classe Integer a un cache interne depuis Java 1.5 dont le fonctionnement est masqué par l'auto-boxing. Ce dernier utilise Integer.parseInt(int) et pas new Integer() :

                        public static Integer valueOf(int i) {
                                assert IntegerCache.high >= 127;
                                if (i >= IntegerCache.low && i <= IntegerCache.high)
                                    return IntegerCache.cache[i + (-IntegerCache.low)];
                                return new Integer(i);
                        }
                        


                        PS : Ceci a le comportement attendu :
                        Integer e = new Integer(1);
                        Integer f = new Integer(1);
                        Integer g = new Integer(999);
                        Integer h = new Integer(999);
                        System.out.println(e == f);
                        System.out.println(g == h);
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 janvier 2012 à 9:37:24

                          Indeed. Jusqu'à récemment j'ignorais çette histoire de cache interne. Assez troublant la première fois qu'on tombe là-dessus.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            26 janvier 2012 à 10:00:08

                            c'est le même système que pour les String, les litterals egaux peuvent se comparer avec ==, mais pas les new String.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            le double égale vs equals

                            × 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