Beide Prüfungen sind unterschiedlich. Der erste prüft auf Identität , der zweite auf Gleichheit . Im Allgemeinen sind zwei Begriffe identisch, wenn sie sich auf dasselbe Objekt beziehen. Dies impliziert, dass sie gleich sind. Zwei Terme sind gleich, wenn ihre Werte gleich sind.
In Bezug auf die Programmierung wird Identität normalerweise durch Referenzgleichheit beeinträchtigt. Wenn der Zeiger auf beide Begriffe gleich (!) Ist, ist das Objekt, auf das sie zeigen, genau das gleiche. Wenn sich die Zeiger jedoch unterscheiden, kann der Wert der Objekte, auf die sie zeigen, immer noch gleich sein. In C # kann die Identität mit dem statischen Object.ReferenceEqualsElement überprüft werden, während die Gleichheit mit dem nicht statischen Element überprüft wird Object.Equals. Da Sie zwei Ganzzahlen in Objekte umwandeln (was übrigens als "Boxen" bezeichnet wird), führt der Operator ==von objectdie erste Prüfung durch, die standardmäßig zugeordnet ist, Object.ReferenceEqualsund prüft die Identität. Wenn Sie das nicht statische EqualsMitglied explizit aufrufen , führt der dynamische Versand zu einem Aufruf von Int32.Equals, der die Gleichheit überprüft.
Beide Konzepte sind ähnlich, aber nicht gleich. Sie mögen zunächst verwirrend erscheinen, aber der kleine Unterschied ist sehr wichtig! Stellen Sie sich zwei Personen vor, nämlich "Alice" und "Bob". Sie leben beide in einem gelben Haus. Unter der Annahme, dass Alice und Bob in einem Viertel leben, in dem Häuser nur in ihrer Farbe unterschiedlich sind, könnten sie beide in verschiedenen gelben Häusern leben. Wenn Sie beide Häuser vergleichen, werden Sie feststellen, dass sie absolut gleich sind, weil sie beide gelb sind! Sie teilen sich jedoch nicht dasselbe Haus und daher sind ihre Häuser gleich , aber nicht identisch . Identität würde bedeuten, dass sie im selben Haus leben.
Hinweis : Einige Sprachen definieren den ===Operator, der auf Identität überprüft werden soll.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Überprüfen Sie es jetzt anhand der Realität. War Ihre Vorhersage richtig? Wenn nicht, können Sie die Diskrepanz erklären?