Her iki kontrol de farklı. Birincisi kimliği kontrol eder , ikincisi eşitlik için . Aynı nesneye atıfta bulunuyorlarsa, genel olarak iki terim aynıdır. Bu onların eşit oldukları anlamına gelir. Değerleri aynıysa iki terim eşittir.
Programlama açısından kimlik genellikle referans eşitliği ile karıştırılır. Her iki terimin göstericisi eşitse (!), İşaret ettikleri nesne tamamen aynıdır. Bununla birlikte, işaretçiler farklıysa, işaret ettikleri nesnelerin değeri yine de eşit olabilir. C # 'da kimlik statik Object.ReferenceEqualsüye kullanılarak kontrol edilebilirken, eşitlik statik olmayan Object.Equalsüye kullanılarak kontrol edilebilir . Eğer operatior, (Btw, "boks" olarak adlandırılır) nesnelere iki tamsayı döküm olduğundan ==arasındaobject gerçekleştirir varsayılan olarak ilk onay, eşlenen Object.ReferenceEqualsve kimlik denetler. Açıkça statik olmayan Equalsüyeyi çağırırsanız, dinamik göndermeInt32.Equals , eşitliği kontrol edenbir çağrıyla sonuçlanır.
Her iki kavram da benzerdir, ancak aynı değildir. İlk başta kafa karıştırıcı görünebilirler, ancak küçük fark çok önemlidir! İki kişiyi, yani "Alice" ve "Bob" hayal edin. İkisi de sarı bir evde yaşıyor. Alice ve Bob'un evlerin sadece renklerinin farklı olduğu bir semtte yaşadıkları varsayımına göre, ikisi de farklı sarı evlerde yaşayabilirler. Her iki evi de karşılaştırırsanız, kesinlikle aynı olduklarını, çünkü ikisinin de sarı olduğunu fark edeceksiniz! Ancak aynı evi paylaşmıyorlar ve bu nedenle evleri eşit ama aynı değil . Kimlik, aynı evde yaşadıkları anlamına gelir .
Not : Bazı diller, ===operatörü kimlik kontrolü için tanımlamaktadır .
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Şimdi gerçeğe karşı kontrol edin. Tahminin doğru muydu? Değilse, tutarsızlığı açıklar mısınız?