Entrambi i controlli sono diversi. Il primo verifica l' identità , il secondo l' uguaglianza . In generale due termini sono identici, se si riferiscono allo stesso oggetto. Ciò implica che sono uguali. Due termini sono uguali, se i loro valori sono gli stessi.
In termini di programmazione, l'identità è solitamente confusa dall'uguaglianza dei riferimenti. Se il puntatore a entrambi i termini è uguale (!), L'oggetto a cui stanno puntando è esattamente lo stesso. Tuttavia, se i puntatori sono diversi, il valore degli oggetti a cui stanno puntando può ancora essere uguale. In C # l'identità può essere verificata utilizzando il Object.ReferenceEqualsmembro statico , mentre l'uguaglianza viene verificata utilizzando il Object.Equalsmembro non statico . Poiché stai eseguendo il casting di due numeri interi sugli oggetti (che è chiamato "boxing", btw), l'operatore ==di objectesegue il primo controllo, che è mappato per impostazione predefinita Object.ReferenceEqualse controlla l'identità. Se chiami esplicitamente il Equalsmembro non statico , l' invio dinamico risulta in una chiamata a Int32.Equals, che verifica l'uguaglianza.
Entrambi i concetti sono simili, ma non uguali. All'inizio possono sembrare confusi, ma la piccola differenza è molto importante! Immagina due persone, ovvero "Alice" e "Bob". Entrambi vivono in una casa gialla. Partendo dal presupposto che Alice e Bob vivano in un quartiere, dove le case differiscono solo nel colore, potrebbero vivere entrambi in case gialle diverse. Se confronti entrambe le case riconoscerai che sono assolutamente uguali, perché sono entrambe gialle! Tuttavia, non condividono la stessa casa e quindi le loro case sono uguali , ma non identiche . L'identità implicherebbe che vivono nella stessa casa.
Nota : alcune lingue stanno definendo l' ===operatore per verificare l'identità.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Ora confrontalo con la realtà. La tua previsione era corretta? In caso contrario, puoi spiegare la discrepanza?