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
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
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