< -->

jeudi 24 mars 2011

Différence entre l’opérateur ‘==’ et la méthode equals() [Programmation Java ]





Dans l’univers de Java, les deux opérateurs equals () et "==" en Java sont généralement utilisés pour évaluer et comparer deux objets afin de vérifier leur égalité. Mais en principe, chaqu’une est utilisées spécifiquement pour un rôle quelques différences entre les deux :

  • La 1ère différence qu’on peut constater c’est au niveau nature & type ; equals () est une fonction alors que "==" est un opérateur
  • L’opérateur "=="est utilisé pour la comparaison de référence (comparaison d'adresse), alors que la méthode. equals () pour la comparaison de contenu.
  •  La méthode. equals () return vrai (true) si les deux objets ont égaux sinon il return faux (false).
  • Autrement dit, "==" vérifie si les deux objets pointent vers le même emplacement mémoire tandis que. equals () évalue la comparaison des valeurs dans l’objets 

Assez bavardé : mettons-nous un exemple pour mieux comprendre !

// Java program pour comprendre equals() et "=="
public class Classtest {
public static void main(String[] args)
 {
String op1 = new String("Super Java");
String op2 = new String("Super Java");
System.out.println(op1 == op2);
System.out.println(op1.equals(op2));op1=op2;System.out.println(op1 == op2);
System.out.println(op1.equals(op2));
} }

A la sortie on aura :

false
true
-------------
true
true


Explication : Ici, nous avons créés deux objets op1 et op2.
Au début op1 et op2 font référence à des objets différents
Lorsque nous utilisons l'opérateur == pour la comparaison op1 et op2, le résultat est faux car les deux ont des adresses mémoires différentes, d’où résultat false reçu.
En utilisant la méthode equals() ; le résultat est vrai car il ne compare que les valeurs op1 et op2.

Pour avoir une vision plus claire et s’assurer on a ajouté op1=op2;
Ce qui fait que les deux objets op1 et op2 ont même référence et aussi même valeur.
D’où résultat

-------------
true
true

Astuce pro :
Pour s'assurer que deux objets sont de la même classe, il faut utiliser la méthode getClass() de la classe Object dont toutes les classes héritent.

(obj1.getClass().equals(obj2.getClass())


Pour les types primitifs a savoir : boolean, byte, char, short, int, long, float et double, Nous pouvons appliquer des opérateurs d'égalité (c’est plus pratique). Nous pouvons également appliquer des opérateurs d'égalité ‘==’ pour les types d'objets.

// == operator les types primitifs
public class Test {
    public static void main(String[] args)
    {
        // integer        System.out.println(10 == 20);

        // char        System.out.println('a' == 'b');

        // char et double
        System.out.println('a' == 97.0);

        // boolean
        System.out.println(true == true);
    }
}
apres compilation on aura :

false
false
true
true

Advertiser