Heim > Backend-Entwicklung > C#.Net-Tutorial > Detaillierte Erläuterung der Unterschiede zwischen ==, Equals und ReferenceEquals in C#

Detaillierte Erläuterung der Unterschiede zwischen ==, Equals und ReferenceEquals in C#

黄舟
Freigeben: 2016-12-14 17:41:48
Original
1440 Leute haben es durchsucht

Einleitung zu diesem Artikel:

Gleich, ==, in C# Mit ReferenceEquals lässt sich ermitteln, ob die Individuen zweier Objekte gleich sind. Für denselben Grundwerttyp sind die Vergleichsergebnisse von == und Equals() gleich. für Werte Typ, da vor jeder Beurteilung eine Boxoperation durchgeführt werden muss, dh jedes Mal ein temporäres Objekt generiert wird, sodass immer false zurückgegeben wird.

1. == Operator

1. Statisches Gleichheitssymbol, das dem vorhandenen != entspricht.

2. Es führt bei Bedarf automatisch die erforderliche Typkonvertierung durch und gibt „true“ oder „false“ zurück, je nachdem, ob die Werte der beiden Objekte gleich sind.

3. Vergleichen Sie bei Referenzobjekten ihre Referenzen (außer bei String-Referenztypen ist String ein Vergleichswert)

4. Vergleichen Sie bei Werttypen ihre Werte

5. Einige eingebaute Referenztypen überladen beispielsweise das ==-Symbol, sodass nicht die Referenz der beiden Zeichenfolgen verglichen wird, sondern ob die beiden Zeichenfolgenliterale gleich sind.

6. Zum Beispiel:

int i = 5;
int j = 5;
Console.WriteLine(i == j);//值类型比较代数值 输出True
  
int m = 6;
double n = 6.0;
Console.WriteLine(m == n);//类型自动转换并比较数值 输出True 
  
object obj1 = new object();
object obj2 = new object();
Console.WriteLine(obj2==obj1);//引用类型比较引用 输出False
Nach dem Login kopieren

2. Gleicht

1 Vergleicht die Referenzen zweier Objekte auf Gleichheit.

2. Bei Werttypen gilt jedoch, dass der Typ gleich ist (es wird keine automatische Typkonvertierung durchgeführt) und der Wert gleich ist (muss für jedes Mitglied der Struktur gleich sein). ), dann kehrt „Gleich“ zurück true, andernfalls false zurückgeben.

3. Bei Referenztypen ist das Standardverhalten das gleiche wie bei ReferenceEquals. True wird nur zurückgegeben, wenn zwei Objekte auf dieselbe Referenz verweisen.

4. Equals können nach Bedarf überladen werden


int i = 5;
int j = 5;
Console.WriteLine(i.Equals(j));//值类型比较 输出True
  
int m = 6;
double n = 6.0;
Console.WriteLine(m.Equals(n));//类型不会自动转换并比较数值 输出False
  
object obj1 = new object();
object obj2 = new object();
Console.WriteLine(obj2.Equals(obj1));//引用类型比较 输出False
Console.WriteLine(obj2.Equals(string.Empty));//输出False,比较量对象的类型不同直接返回False
Nach dem Login kopieren
Drei , ReferenceEquals

1. Statische Methode des Objekts, vergleicht, ob die Referenzen zweier Objekte gleich sind.

2. Diese Methode kann in geerbten Klassen nicht überschrieben werden. Der Prototyp ist: public static bool ReferenceEquals(object objA, object objB);FCL wurde für uns implementiert. Es dient zum Vergleich, ob die Speicheradresse, auf die die Referenz zeigt, dieselbe ist.

3. Für zwei Werttypen ist ReferenceEquals immer falsch, da ReferenceEquals(object a,object b) Nach der Methode wird der Werttyp in eine neue Referenztypinstanz umgepackt, und natürlich gibt es keine Referenzgleichheit.

4. Bei zwei Referenztypen vergleicht ReferenceEquals, ob sie auf dieselbe Adresse verweisen.

5. Beispiele


int i = 5;
 int j = 5;
 Console.WriteLine(object.ReferenceEquals(i, j));//输出False
 
 int m = 6;
 double n = 6.0;
 Console.WriteLine(object.ReferenceEquals(m, n));//输出False
 
 object obj1 = new object();
 object obj2 = new object();
 Console.WriteLine(object.ReferenceEquals(obj1, obj2));//输出False
Nach dem Login kopieren

Das Obige ist der Unterschied zwischen ==, Equals und ReferenceEquals. Ich hoffe, dass das Lernen für alle hilfreich sein wird. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn).

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage