मुझे पता है कि जब हम वस्तुओं को पारित कर रहे हैं तो हम इसके संदर्भ को एक मूल्य के रूप में पारित कर रहे हैं। लेकिन आपको यह मान hashcode()
विधि अधिकार का उपयोग कर रहा है (मेरे परीक्षणों के मुताबिक यह वही है)? चूंकि hashcode()
स्मृति पता नहीं है और हर समय अद्वितीय मूल्य प्राप्त करने की गारंटी नहीं है, क्या ऑब्जेक्ट पास करते समय टकराव जैसी अजीब चीज़ें हो सकती हैं?जावा में वस्तुओं को पार करते समय वास्तव में क्या होता है?
(hashcode()
मान लिया जाये कि ओवरराइड नहीं किया जा चुका है, यानी, यह System.identityHashCode()
रूप में एक ही मान देता है)
तीन इस सवाल जैसे कई हैं, लेकिन मैं एक प्रासंगिक संसाधन जो discuses कि मूल्य जा रहा है क्या नहीं मिल सकता है पास हो गया और आप इसे कैसे प्राप्त करते हैं?
संपादित करें: यहां मेरा परीक्षण है। डिफ़ॉल्ट toSting()
hashCode()
का उपयोग करता है और इसे हेक्स मान में परिवर्तित करता है। तो जब हम वस्तुओं को पारित कर रहे हैं, तो क्या यह मूल्य पारित किया जा रहा है? या जावा सभी वस्तुओं (पारित होने) का ट्रैक रखने के लिए क्या करता है, इसलिए संदर्भ टकराव नहीं होगा?
Object o = new Object();
System.out.println(o);
System.out.println(o.toString()); //both prints same thing - [email protected]
जैसा कि आप कहते हैं कि डिफ़ॉल्ट कार्यान्वयन स्मृति पता देता है, तो इसकी कोई समस्या नहीं है। लेकिन मैंने जो देखा है वह यह है कि यह (डिफ़ॉल्ट फ़ंक्शन) स्मृति पता वापस करने की गारंटी नहीं देता है। लेकिन फिर क्या होता है जब 2^32 और हैशकोड() से अधिक ऑब्जेक्ट होते हैं तो एक पूर्णांक देता है जो 32 बिट्स है ?? – KillBill
@ user601L 'हैशकोड()' मूर्खतापूर्ण विधि से नहीं है। कभी-कभी टकराव होते हैं। लेकिन यह हमेशा आपको वापस लौटने के लिए कुछ मूल्य मिलेगा, चाहे वह इसे प्राप्त करने के लिए अपने मेमोरी पते का उपयोग करता है या नहीं। आपको वास्तव में इसके बारे में चिंता नहीं करनी चाहिए, बस पता है कि किनारे के मामलों में टकराव संभव है। –
@bohemian मेरे व्याकरण को सही करने के लिए धन्यवाद। Imaidiot। –