89 votes

Comparez deux objets avec .equals() et l'opérateur ==.

J'ai construit une classe avec un String champ. Ensuite, j'ai créé deux objets et je dois les comparer à l'aide de == opérateur et .equals() aussi. Voici ce que j'ai fait :

public class MyClass {

    String a;

    public MyClass(String ab) {
        a = ab;
    }

    public boolean equals(Object object2) {
        if(a == object2) { 
            return true;
        }
        else return false;
    }

    public boolean equals2(Object object2) {
        if(a.equals(object2)) {
            return true;
        }
        else return false;
    }

    public static void main(String[] args) {

        MyClass object1 = new MyClass("test");
        MyClass object2 = new MyClass("test");

        object1.equals(object2);
        System.out.println(object1.equals(object2));

        object1.equals2(object2);
        System.out.println(object1.equals2(object2));
    }

}

Après la compilation, il montre deux fois faux comme résultat. Pourquoi le résultat est-il faux si les deux objets ont les mêmes champs - "test" ?

3voto

jlordo Points 22012

Votre equals2() retournera toujours la même chose que equals() ! !

Votre code avec mes commentaires :

public boolean equals2(Object object2) {  // equals2 method
    if(a.equals(object2)) { // if equals() method returns true
        return true; // return true
    }
    else return false; // if equals() method returns false, also return false
}

2voto

ashish.al Points 21

Déclarations a == object2 et a.equals(object2) les deux retourneront toujours false parce que a es un string tandis que object2 est une instance de MyClass

2voto

Azhar Khan Points 119

Votre mise en œuvre doit plaire :

public boolean equals2(Object object2) {
    if(a.equals(object2.a)) {
        return true;
    }
    else return false;
}

Avec cette mise en œuvre, vos deux méthodes fonctionneraient.

2voto

tectonicfury Points 61

Votre classe peut mettre en œuvre l'interface Comparable pour obtenir la même fonctionnalité. Votre classe doit implémenter la méthode compareTo() déclarée dans l'interface.

public class MyClass implements Comparable<MyClass>{

    String a;

    public MyClass(String ab){
        a = ab;
    }

    // returns an int not a boolean
    public int compareTo(MyClass someMyClass){ 

        /* The String class implements a compareTo method, returning a 0 
           if the two strings are identical, instead of a boolean.
           Since 'a' is a string, it has the compareTo method which we call
           in MyClass's compareTo method.
        */

        return this.a.compareTo(someMyClass.a);

    }

    public static void main(String[] args){

        MyClass object1 = new MyClass("test");
        MyClass object2 = new MyClass("test");

        if(object1.compareTo(object2) == 0){
            System.out.println("true");
        }
        else{
            System.out.println("false");
        }
    }
}

2voto

Madhan Points 342

L'opérateur "==" renvoie vrai uniquement si les deux références pointent vers le même objet en mémoire. La méthode equals(), quant à elle, renvoie vrai en fonction du contenu de l'objet.

Exemple :

String personalLoan = new String("cheap personal loans");
String homeLoan = new String("cheap personal loans");

//since two strings are different object result should be false
boolean result = personalLoan == homeLoan;
System.out.println("Comparing two strings with == operator: " + result);

//since strings contains same content , equals() should return true
result = personalLoan.equals(homeLoan);
System.out.println("Comparing two Strings with same content using equals method: " + result);

homeLoan = personalLoan;
//since both homeLoan and personalLoan reference variable are pointing to same object
//"==" should return true
result = (personalLoan == homeLoan);
System.out.println("Comparing two reference pointing to same String with == operator: " + result);

Sortie : Comparaison de deux chaînes de caractères avec l'opérateur == : false Comparaison de deux chaînes de caractères ayant le même contenu à l'aide de la méthode equals : true Comparaison de deux références pointant vers la même chaîne avec l'opérateur == : true

Vous pouvez également obtenir plus de détails en cliquant sur le lien : http://javarevisited.blogspot.in/2012/12/difference-between-equals-method-and-equality-operator-java.html?m=1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X