IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

question sur la méthode equals()


Sujet :

avec Java

  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut question sur la méthode equals()
    Bonjour,

    dans la doc Java, j'ai lu ceci :
    The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).
    Si j'ai bien compris, ça signifie que la méthode equals sur des objets A et B (par exemple des bufferedImage), ne renverra "true" que si A et B sont en fait des références vers le même objet.
    Dans ce cas, un assertEquals sur deux objets strictement identiques mais qui ne sont pas des références sur le même objet ne marchera jamais, n'est ce pas?

    Mais alors, comment tester que deux objets (toujours mon exemple des bufferedImage) sont égaux sachant que ce ne sont pas des références vers un seul et même objet?

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Non, par "refer to the same object" ils entendent : sémantiquement.

    Tu définis tes propres règles expliquant que deux objets sont égaux. Par exemple, pour un objet Point(int x, int y) on pourra dire que deux points sont égaux si p1.x == p2.x && p1.y == p2.y, mais si tu veux, tu peux dire qu'ils sont égaux si p1.x == p2.x - p2.y

    Le seul truc à savoir, c'est que si tu ne définis pas de equals(), c'est le equals parent qui sera appellé et le equals() de Object renvoie false systématiquement.
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  3. #3
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    en lisant le tuto de Régis POUILLER sur les tests unitaires JUnit version 4.5, j'ai trouvé la notion de contrat isEqual.

    J'ai l'impression que ça pourrait être la solution pour tester que deux objets sont identiques sans être les mêmes.
    Je vais passer mes tests unitaires de JUnit 3.8 à JUnit 4.5 pour tester ça.

    les conseils et commentaires restent bien entendu les bienvenues

  4. #4
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Faiche Voir le message
    Non, par "refer to the same object" ils entendent : sémantiquement.

    Tu définis tes propres règles expliquant que deux objets sont égaux. Par exemple, pour un objet Point(int x, int y) on pourra dire que deux points sont égaux si p1.x == p2.x && p1.y == p2.y, mais si tu veux, tu peux dire qu'ils sont égaux si p1.x == p2.x - p2.y

    Le seul truc à savoir, c'est que si tu ne définis pas de equals(), c'est le equals parent qui sera appellé et le equals() de Object renvoie false systématiquement.
    Je viens de voir ta réponse.
    En fait, je me posais cette question après avoir fait un assertEqual sur des BufferedImage. Je pensais que la méthode equals serait implémentée de base, non?

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Si tu sais pas, regarde la javadoc.

    Je vois pas comment deux bufferedImage peuvent être égales, mais y a probablement un truc.
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  6. #6
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Je viens justement d'aller voir la Javadoc, et en fait, tu as raison : la méthode equals des bufferedImage est héritée de Object. Donc si par défaut la méthode equals renvoie false, ça explique pourquoi ça me renvoyait false pour 2 bufferedImage censée être strictement identiques...
    J'avais contourné le problème en comparant les matrices, mais je trouvais intéressant de savoir pourqpuoi ça marchait pas

    il me reste juste une question relative à ma réponse précédente : est-il judicieux de passer de JUnit 3.8 à JUnit 4.5?
    C'est un peu hors sujet du post initial mais bon

  7. #7
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Pour éviter la confusion, la méthode equals ne renvoie pas toujours false mais plutôt cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public boolean equals(Object obj) {
         return this == obj;
    }
    Et c'est bien ce que tu avais mis dans ton premier post:
    renverra "true" que si A et B sont en fait des références vers le même objet
    Pour compléter je dirai que cette définition est la meilleure dans la grande majorité des cas. Attention donc à ne pas la surcharger à tort et à travers

  8. #8
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    merci pour la précision, je comprends mieux le fonctionnement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur la méthode paint()
    Par Invité dans le forum 2D
    Réponses: 8
    Dernier message: 30/11/2008, 12h18
  2. [c#][Question sur la méthode ReadToEnd()]
    Par cescu dans le forum C#
    Réponses: 4
    Dernier message: 17/11/2008, 09h00
  3. Question sur la méthode extends
    Par Djule dans le forum Langage
    Réponses: 4
    Dernier message: 04/02/2007, 16h01
  4. Question sur les méthodes abstraites
    Par nmathon dans le forum Delphi
    Réponses: 3
    Dernier message: 15/06/2006, 20h30
  5. [WebServices][axis] question sur la méthode service()
    Par Nycos62 dans le forum Services Web
    Réponses: 9
    Dernier message: 21/04/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo