web-dev-qa-db-fra.com

Objects.equals et Object.equals

J'essaie de créer une classe Tuple qui autorise une structure de type Tuple en Java. Le type général de deux éléments dans Tuple sont respectivement X et Y. J'essaie de remplacer un égal correct pour cette classe.

La chose est, je sais que Object.equals tombe en défaut qu'il compare toujours sur la base de références comme "==", donc je ne suis pas sûr de pouvoir l'utiliser. J'ai regardé dans les objets et il y a un égal () en lui. Est-ce que celui-ci se compare toujours aux références, ou se compare-t-il au contenu?

Imaginez rapidement la déclaration de retour comme quelque chose comme:

return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);

où prev et next sont des éléments de Tuple. Est-ce que cela fonctionnerait?

29
jfcjohn

La différence est que la Objects.equals() considère que deux valeurs nulles sont "égales". Le pseudo code est:

  1. si les deux paramètres sont null ou le même objet, retournez true
  2. si le premier paramètre est null return false
  3. renvoie le résultat du passage du deuxième paramètre à la méthode equals() du premier paramètre

Cela signifie qu'il est "null safe" (malgré la mise en œuvre non null safe de la méthode equals() du premier paramètre).

53
Bohemian