दोनों चेक अलग-अलग हैं। पहला एक पहचान के लिए जाँच करता है , दूसरा समानता के लिए । सामान्य तौर पर दो शब्द समान होते हैं, यदि वे एक ही वस्तु को संदर्भित कर रहे हों। इसका मतलब है कि वे समान हैं। दो शब्द समान हैं, यदि उनका मान समान है।
प्रोग्रामिंग पहचान के संदर्भ में आमतौर पर संदर्भ समानता द्वारा गड़बड़ की जाती है। यदि दोनों पदों के लिए सूचक समान हैं (!), जिस वस्तु को वे इंगित कर रहे हैं वह बिल्कुल एक ही है। हालाँकि, यदि पॉइंटर्स अलग हैं, तो वे जिस ऑब्जेक्ट को इंगित कर रहे हैं, उसका मूल्य अभी भी बराबर हो सकता है। C # पहचान में स्थिर Object.ReferenceEqualsसदस्य का उपयोग करके जाँच की जा सकती है , जबकि गैर-स्थिर Object.Equalsसदस्य का उपयोग करके समानता की जाँच की जाती है । चूंकि आप दो पूर्णांक को ऑब्जेक्ट्स (जिसे "बॉक्सिंग", btw) कहा जाता है, के ऑपरेटर को पहले चेक ==को objectनिष्पादित करते हैं, जो कि डिफ़ॉल्ट मैपिंग द्वारा होता है Object.ReferenceEqualsऔर पहचान के लिए जांच करता है। यदि आप Equalsअन्वेषण गैर-स्थिर-कॉल , डायनामिक डिस्पैच कॉल को कॉल करते हैं Int32.Equals, जो समानता के लिए जाँच करता है।
दोनों अवधारणाएं समान हैं, लेकिन समान नहीं हैं। वे पहले के लिए भ्रामक लग सकते हैं, लेकिन छोटा अंतर बहुत महत्वपूर्ण है! "ऐलिस" और "बॉब" नामक दो व्यक्तियों की कल्पना करें। वे दोनों एक पीले घर में रह रहे हैं। इस धारणा के आधार पर, कि एलिस और बॉब एक जिले में रह रहे हैं, जहां घर केवल उनके रंग में भिन्न होते हैं, वे दोनों अलग-अलग पीले घरों में रह सकते थे। यदि आप दोनों घरों की तुलना करते हैं, तो आप पहचान लेंगे, कि वे बिल्कुल एक जैसे हैं, क्योंकि वे दोनों पीले हैं! हालांकि, वे एक ही घर को साझा नहीं कर रहे हैं और इस तरह उनके घर समान हैं , लेकिन समान नहीं हैं । पहचान का मतलब यह होगा कि वे एक ही घर में रह रहे हैं ।
ध्यान दें : कुछ भाषाएं ===पहचान की जांच करने के लिए ऑपरेटर को परिभाषित कर रही हैं ।
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);अब इसे वास्तविकता के विरुद्ध जाँचें। क्या आपकी भविष्यवाणी सही थी? यदि नहीं, तो क्या आप विसंगति की व्याख्या कर सकते हैं?