Pourquoi est-ce que le code de retour de la vraie:
new Byte() == new Byte() // returns true
mais ce code retourne false:
new Byte[0] == new Byte[0] // returns false
Pourquoi est-ce que le code de retour de la vraie:
new Byte() == new Byte() // returns true
mais ce code retourne false:
new Byte[0] == new Byte[0] // returns false
Parce qu' new Byte()
crée de la valeur type, qui sont comparées à la valeur (par défaut, elle sera de retour byte
valeur 0
). Et new Byte[0]
crée tableau, qui est un type de référence et rapport par référence (et ces deux instances de la matrice ont des références différentes).
Voir les Types de Valeur et les Types Référence de l'article pour plus de détails.
Les octets sont des types de valeur .NET, ce qui signifie que l' ==
de l'opérateur retourne true si et seulement si les deux octets ont la même valeur. Ceci est également connu comme la valeur de l'égalité.
Mais les tableaux sont des types référence .NET, sens de l' ==
de l'opérateur retourne true si et seulement si elles se réfèrent à la même occurrence de tableau dans la mémoire. Ceci est également connu comme la référence de l'égalité ou de l'identité.
Notez que l' ==
de l'opérateur peut être surchargé à la fois référence et des types de valeur. System.String
, par exemple, est un type de référence, mais l' ==
de l'opérateur pour les chaînes compare chaque caractère dans le tableau dans l'ordre. Voir les lignes Directrices pour la Surcharge Equals() et Operator == (Guide de Programmation C#).
Si vous voulez tester si les tableaux contiennent exactement les mêmes valeurs (dans l'ordre), vous devez envisager d'utiliser Enumerable.SequenceEqual
au lieu de ==
.
la comparaison de référence est en fait la comparaison adresse de pointeur, qui sont différentes c'est la raison pour renvoyer false et de la valeur de l'adresse pas de question, il compare la valeur.
Compilateur d'essayer de stocker le type de Valeur dans les registres, mais en raison du nombre limité de registres numéro de stockage de plus qui se passe dans la Pile avec des valeurs [Référence], pendant que le type de Référence est dans la pile, mais la valeur la tenue d'une adresse de l'adresse de mémoire dans le Tas.
Comparaison ici de comparer la valeur présente dans la pile, qui est dans le premier cas, pour les deux mêmes, alors que dans le second cas c'est l'adresse des tas qui sont différents.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.