यदि मैं बराबर विधि को ओवरराइड किए बिना ए के 2 उदाहरणों की तुलना करता हूं, तो मुझे अपेक्षित परिणाम मिलेगा?
कि आप क्या उम्मीद :) पर निर्भर करता है
डिफ़ॉल्ट कार्यान्वयन आप संदर्भ समानता दे देंगे - दूसरे शब्दों में, जब आप दो संदर्भों तुलना, equals
ही सच्चा वापस आ जाएगी अगर वे कर रहे हैं के लिए संदर्भ एक ही वस्तु
आप आमतौर पर "मूल्य समानता" को लागू करने के लिए equals
ओवरराइड करेंगे - जहां दो अलग-अलग वस्तुओं को बराबर समझा जाता है, आमतौर पर बराबर फ़ील्ड मानों के आधार पर। समानता का सटीक अर्थ आपके डिजाइन पर निर्भर करेगा - उदाहरण के लिए, दो वस्तुएं अभी भी अन्य तरीकों से अलग-अलग हो सकती हैं।
आप equals
ओवरराइड हैं, तो आप भी ओवरराइड hashCode
संगत equals
साथ रहना चाहिए, इस तरह है कि अगर a.equals(b)
सत्य है, तभी a.hashCode() == b.hashCode()
। यह हैश-आधारित संग्रहों (जैसे HashMap
) में कुंजियों के रूप में उपयोग करने के लिए आपकी कक्षा के उदाहरणों को अनुमति देगा ताकि आप किसी संदर्भ का उपयोग करने के बजाए बराबर मूल पर एक मान के आधार पर एक मूल्य देख सकें। सटीक मूल कुंजी वस्तु के लिए।
स्रोत
2012-10-30 06:55:19
इस से संबंधित है के लिए कार्रवाई करने के लिए नहीं, बल्कि http का डुप्लिकेट: // stackoverflow .com/प्रश्न/27581/ओवरराइडिंग-बराबर-और-हैशकोड-इन-जावा क्योंकि यह * बराबर * और 'हैकोड 'को ओवरराइड करने के बारे में है, जबकि यह ओवरराइड करने के बारे में * कब * है। – Raedwald
यह एक बेहतर डुप्लिकेट प्रतीत होता है: http://stackoverflow.com/questions/13387742 –