Ambas as verificações são diferentes. O primeiro verifica a identidade , o segundo verifica a igualdade . Em geral, dois termos são idênticos, se eles se referem ao mesmo objeto. Isso implica que eles são iguais. Dois termos são iguais, se seus valores forem iguais.
Em termos de programação, a identidade geralmente é confundida por igualdade de referência. Se o ponteiro para ambos os termos for igual (!), O objeto para o qual eles estão apontando é exatamente o mesmo. No entanto, se os ponteiros forem diferentes, o valor dos objetos para os quais eles estão apontando ainda pode ser igual. Em C #, a identidade pode ser verificada usando o Object.ReferenceEqualsmembro estático , enquanto a igualdade é verificada usando o Object.Equalsmembro não estático . Como você está convertendo dois inteiros para objetos (o que é chamado de "boxing", aliás), o operador ==de objectrealiza a primeira verificação, que por padrão é mapeada Object.ReferenceEqualse verifica a identidade. Se você chamar explicitamente o não-estático Equals-member, o despacho dinâmico resultará em uma chamada para Int32.Equals, que verifica a igualdade.
Ambos os conceitos são semelhantes, mas não iguais. Eles podem parecer confusos no início, mas a pequena diferença é muito importante! Imagine duas pessoas, nomeadamente "Alice" e "Bob". Os dois estão morando em uma casa amarela. Partindo do pressuposto de que Alice e Bob estão morando em um bairro onde as casas têm apenas cores diferentes, os dois poderiam morar em casas amarelas diferentes. Se você comparar as duas casas, você reconhecerá que são absolutamente iguais, porque ambas são amarelas! No entanto, eles não estão compartilhando a mesma casa e, portanto, suas casas são iguais , mas não idênticas . A identidade implicaria que eles estão morando na mesma casa.
Nota : alguns idiomas estão definindo o ===operador para verificar a identidade.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Agora compare com a realidade. Sua previsão estava correta? Se não, você pode explicar a discrepância?