आमतौर पर Object.hashCode()
का डिफ़ॉल्ट कार्यान्वयन स्मृति में ऑब्जेक्ट के आवंटित पते का कुछ कार्य है (हालांकि यह जेएलएस द्वारा अनिवार्य नहीं है)। यह देखते हुए कि वीएम स्मृति में स्मृति के बारे में बताता है, System.identityHashCode()
द्वारा वापस मूल्य क्यों ऑब्जेक्ट के जीवनकाल में कभी नहीं बदला जाता है?JVM कैसे सुनिश्चित करता है कि System.identityHashCode() कभी नहीं बदलेगा?
यदि यह "एक-शॉट" गणना है (ऑब्जेक्ट की hashCode
की गणना एक बार की जाती है और ऑब्जेक्ट हेडर या कुछ में छीन ली जाती है), तो इसका मतलब यह है कि दो ऑब्जेक्ट्स के लिए यह संभव है identityHashCode
(यदि वे होते हैं स्मृति में एक ही पते पर पहली बार आवंटित किया जाएगा)?
संबंधित प्रश्न: क्या यह स्मृति एक वास्तविक स्मृति पता या कुछ आभासी पता है जो ऑब्जेक्ट को शफल होने के बावजूद तय किया जा सकता है?यदि आभासी है, तो यह अच्छा होगा क्योंकि इसके लिए पॉइंटर्स को समायोजित करने की आवश्यकता नहीं होगी। दूसरी ओर, इसका मतलब एक अतिरिक्त संकेत और संभावित रूप से बड़ी मैपिंग तालिका होगी। – Thilo
पहली बार अनुरोध किए जाने पर पते का मामूली पुनर्गठन है। (कम बिट्स के साथ एक हैश कोड लौटने से सभी शून्य बहुत अच्छा नहीं है।) –
दरअसल, यह कहां कहता है कि पहचान हैशकोड कभी नहीं बदला जाना चाहिए? System.identityHashCode के लिए JavaDoc उस पर स्पष्ट नहीं है। – Thilo