Maison >Java >javaDidacticiel >Explication détaillée de la différence entre '==' et equals() en Java

Explication détaillée de la différence entre '==' et equals() en Java

高洛峰
高洛峰original
2017-02-03 13:33:401328parcourir

La différence entre "==" et equals() en Java

Pour l'opérateur relationnel "==", "Java Programming Thoughts" le décrit ainsi : "L'opérateur relationnel génère un booléen en tant que Résultat, ils calculent les relations entre les valeurs de leurs opérandes". La « valeur » de l’opérande mérite ici notre attention. Pour les 8 types de données de base (boolean, byte, char, short, int, float, double, long), leurs variables stockent directement des « valeurs ». Par conséquent, lorsque nous utilisons "==" pour comparer des variables de types de données de base, la comparaison réelle est la valeur stockée dans la variable, par exemple :

public static void main(String[] args) {
    int a = 5, b = 5;
    System.out.println(a == b);
  }

Évidemment, le programme affichera : true. Mais qu’en est-il du code suivant ?

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c == d);
  }

Nous avons exécuté le programme et constaté que le résultat était : faux. En effet, Integer n'est pas un type de données de base en Java. Ses variables c et d sont appelées références pointant vers des objets en Java. La « valeur » qu'elles stockent est l'adresse de l'objet en mémoire, et non la valeur « 5 » elle-même. Par conséquent, c et d stockent en fait les adresses de deux objets Integer avec respectivement une valeur de "5". Ces deux objets ne sont pas dans le même espace mémoire, et le résultat de la comparaison "==" est naturellement faux.

Alors, que compare la méthode equals() ? equals() est une méthode définie dans la classe de base Object. Dans la classe Object, la méthode equals() est définie comme :

public boolean equals(Object obj) {
    return (this == obj);
  }

Cela équivaut à "==". En fait, l’importance de la méthode Equals() réside dans la réécriture, sinon l’appel à Equals() n’a aucun sens. Par exemple, la classe Integer héritée de Object remplace la méthode equals() :

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
      return value == ((Integer)obj).intValue();
    }
    return false;
  }


Le sens de cette méthode est de comparer des valeurs, donc si nous avons deux objets Integer avec la même valeur, appelez equals() pour comparaison :

public static void main(String[] args) {
    Integer c = new Integer(5), d = new Integer(5);
    System.out.println(c.equals(d));
  }


Le résultat est vrai.

Merci d'avoir lu, j'espère que cela pourra vous aider, merci pour votre soutien à ce site !

Pour des articles plus détaillés expliquant la différence entre "==" et equals() en Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn