Que signifie le mot "égal" dans l'API Java?


Je ne suis pas sûr que quiconque connaisse la réponse à cette question, sauf si vous êtes responsable de l'écriture de l'API Jave, mais lorsque l'API Java dit "égal", cela signifie-t-il toujours que a.equals(b) évalue à true, ou parfois cela signifie-t-il que a == b est true? J'ai récemment étendu une classe et je me suis demandé si je devais remplacer une méthode en fonction de l'endroit où elle utilisait ou non == ou .equals. Plus précisément, j'ai étendu javafx.haricot.contraignant.ObjectExpression et était curieux de la méthode .isEqualTo(Object other). Je vérifié la source (ici) et a constaté que cette méthode utilise .equals pour la comparaison. Je suis curieux de savoir si je peux être sûr que quand je lis des choses comme

"Crée une nouvelle expression booléenne qui est vraie si cette expression Object est égale à une valeur constante."

Que la méthode n'utilise pas l'opérateur ==. Bien que, comme je le pense, l'API ne puisse pas non plus signifier .equals, puisque (par exemple)

String constant = "constant";
ObjectExpress<String> stringExpression = new MyStringExpression("constant");

constant.equals(stringExpression)

Sera toujours évalué à false. Si peut-être que ma question devrait être "quand l'API dit "égal", fait-elle toujours référence à la façon la plus raisonnable d'appliquer .equal ou parfois fait-elle référence à la façon analogue d'appliquer ==?"

MODIFIER

Je pense que sur la base des réponses, je devrais clarifier: c'est pas une question sur la différence entre == et .equal. Il s'agit de ce à quoi l'API Java fait référence lorsqu'elle utilise le mot anglais "equals".

Author: Mogsdad, 2014-02-25

5 answers

Il est clair que vous ne comprendre la différence entre equals() et ==. Votre question est donc plutôt philosophique:)

Généralement, de nombreuses API utilisent "equals to" au sens de equals() et "is the same as" au sens de ==. Par exemple, JUnit a la méthode d'assertion assertEquals() et assertSame().

Cependant, utilisez votre bon sens et analysez le langage de la doucmentation. Notez dans votre phrase citée de l'API l'utilisation de l'article indéfini:

"Crée un nouvelle expression booléenne qui est vraie si ceci ObjectExpression est égal à une valeur constante."

"un la valeur de la constante" signifie clairement tout valeur constante, pas la même valeur qu' le "constant" de la valeur. Il est donc clair que cela ne peut pas signifier la même chose que constant.equals(stringExpression).

Alors prenez-le de cette façon: lorsque la documentation dit "est égal à ", considérez qu'il se rapporte au contenu de la variable, pas à sa référence . Mais l'utilisation de bon sens et lire la phrase dans son ensemble:)

Répond-il à votre question? : P

 2
Author: Honza Zidek, 2014-02-25 09:12:36

Cela signifie-t-il toujours que a. equals (b) évalue à true, ou parfois signifie a == b est vrai? lorsque l'API dit "égal", fait-elle toujours référence au plus moyen raisonnable de postuler .égal ou parfois fait il référence à la façon analogue d'appliquer ==?"

Il s'agit de remplacer la méthode equals(), En java, seul += opérateur surchargé, les autres opérateurs ne peuvent pas être surchargés signifie, vous ne pouvez pas remplacer ==

 1
Author: Abimaran Kugathasan, 2014-02-25 08:51:05

Lors de l'écriture d'un API-doc lors de l'utilisation du terme "égal", cela devrait généralement signifier "égal en termes de equals()-méthode". Si cela dépend vraiment de la minutie de l'auteur de la documentation, mais dans les documents API officiels, je prendrais toujours comme ayant cette signification.

Pour votre question "cela peut-il aussi signifier ==": cela peut de la même manière que Object's equals()-method vérifie simplement l'identité de référence, c'est-à-dire qu'elle vérifie en utilisant ==.

 1
Author: piet.t, 2014-02-25 08:58:48

Si vous utilisez .equals, il comparera la valeur. En utilisant ==, vous comparez la référence et celles-ci ne doivent pas nécessairement être les mêmes même si vos valeurs sont les mêmes.

Voir le site web suivant pour une explication complète: http://www.javabeat.net/what-is-difference-between-equals-and/

J'ai copié une partie de son exemple:

s1 = new String("abc");
s2 = new String("abc");

Maintenant, si vous utilisez equals() méthode pour vérifier leur équivalence

if(s1.equals(s2))
     System.out.println("s1.equals(s2) is TRUE");
else
     System.out.println("s1.equals(s2) is FALSE");

, Vous obtiendrez la sortie TRUE comme la méthode equals() vérifie l'égalité de contenu. Permet de vérifier l'opérateur ==..

if(s1==s2)
     System.out.printlln("s1==s2 is TRUE");
   else
     System.out.println("s1==s2 is FALSE");

Maintenant, vous obtiendrez le FALSE en sortie car s1 et s2 pointent vers deux objets différents même si les deux partagent le même contenu de chaîne. C'est à cause de new String() chaque fois qu'un nouvel objet est créé.

 0
Author: GuyT, 2014-02-25 09:01:01

Lorsque quelqu'un crée une classe java, il hérite de la méthode boolean equals(Object o) de la classe 'Object', car toute classe définie par l'utilisateur lorsqu'elle n'étend aucune autre classe étend implicitement class Object.

Lorsque cette classe est instanciée à l'aide de l'opérateur new, l'égalité de ces objets est obtenue en utilisant cette formule de soulignement.

    return (this == obj);

Par conséquent, il retournera true si et seulement si les deux objets se réfèrent au même objet sur le tas, c'est-à-dire (a = = b) = true

    class Abc{}
    Abc a = new Abc();
    Abc b = a;
    a==b //(true)
    a.equals(b) //(true)

Et supposons qu'ils soient une instance de même classe mais sont deux objets différents de

   class Abc{}
   Abc a = new Abc();
   Abc b = new Abc();
   a==b; //(false)
   a.equals(b); //(false)

Mais lorsqu'une classe créée remplace cette méthode equals, cette égalité est évaluée à l'aide de la nouvelle formule fournie tout en la remplaçant. exemple .équivaut à un remplacement d'objet par java.util.Date

    public boolean equals(Object obj) {
            return obj instanceof Date && getTime() == ((Date) obj).getTime();
     }

Cela retournera true si et seulement les deux objets Date ont une valeur égale renvoyée par la méthode getTime ().

J'espère que cela aide. N'hésitez pas à poser d'autres questions en cas de doute.

 0
Author: Jafar Ali, 2014-02-25 09:21:57