Les deux contrôles sont différents. Le premier vérifie l' identité , le second l' égalité . En général, deux termes sont identiques s'ils font référence au même objet. Cela implique qu'ils sont égaux. Deux termes sont égaux, si leurs valeurs sont identiques.
En termes de programmation, l'identité est généralement définie par l'égalité de référence. Si le pointeur vers les deux termes est égal (!), L'objet sur lequel il pointe est exactement le même. Cependant, si les pointeurs sont différents, la valeur des objets sur lesquels ils pointent peut toujours être égale. En C #, l'identité peut être vérifiée à l'aide du Object.ReferenceEqualsmembre statique , tandis que l'égalité est vérifiée à l'aide du Object.Equalsmembre non statique . Puisque vous transtypez deux entiers en objets (ce qui est appelé "boxing", btw), l'opérateur ==de objecteffectue la première vérification, qui est par défaut mappée Object.ReferenceEqualset vérifie l'identité. Si vous appelez explicitement le membre non statique Equals, la répartition dynamique entraîne un appel à Int32.Equals, qui vérifie l'égalité.
Les deux concepts sont similaires, mais pas identiques. Ils peuvent sembler déroutants pour le premier, mais la petite différence est très importante! Imaginez deux personnes, à savoir «Alice» et «Bob». Ils vivent tous les deux dans une maison jaune. Sur la base de l'hypothèse, qu'Alice et Bob vivent dans un quartier, où les maisons ne diffèrent que par leur couleur, ils pourraient tous deux vivre dans des maisons jaunes différentes. Si vous comparez les deux maisons, vous reconnaîtrez qu'elles sont absolument identiques, car elles sont toutes les deux jaunes! Cependant, ils ne partagent pas la même maison et donc leurs maisons sont égales , mais pas identiques . L'identité impliquerait qu'ils vivent dans la même maison.
Remarque : certaines langues définissent l' ===opérateur pour vérifier l'identité.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Maintenant, comparez-le à la réalité. Votre prédiction était-elle correcte? Sinon, pouvez-vous expliquer l'écart?