2010-04-13 4 views
26

Soit A une classe avec certains membres comme x, y, z:Quel est le comportement par défaut de Equals Method?

Class A { 
    int x; 
    int y; 
    String z; 
    ... 
} 

A est un objet pour qu'il hérite des fonctions « Égal » définies dans l'objet. Quel est le comportement par défaut de cette fonction? Est-ce qu'il vérifie l'égalité des membres ou vérifie-t-il l'égalité de référence?

Répondre

42

L'implémentation par défaut de Equals soutient l'égalité de référence pour types de référence et l'égalité des pour les types bitwise de valeur. L'égalité de référence signifie que les références d'objet comparées se réfèrent au même objet. L'égalité des bits signifie que les objets comparés ont la même représentation binaire .

http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx

+3

Les choses sont en réalité plus compliquée pour les types de valeur: ce n'est pas la comparaison d'égalité de aways. Voir cette question pour plus de détails http://stackoverflow.com/q/8315656/129073 – Gebb

+0

chaîne est spéciale. string.equals est l'égalité au niveau du bit, tandis que la chaîne est le type de référence. –

+4

@WillYu Pas d'égalité au niveau du bit. Il teste si les caractères sont les mêmes. L'égalité des bits signifie que toutes les méta-données .NET (comme si la chaîne est internée ou non) seraient les mêmes. Ce n'est pas non plus spécial (à cet égard), il remplace simplement Equals, et surcharge l'opérateur d'égalité (in). L'implémentation par défaut pour cela serait toujours l'égalité de référence. – Aidiakapi

3

il vérifie référence à moins que vous surchargent equals

Questions connexes