2013-12-17 6 views
7

मुझे यह जांचने की ज़रूरत है कि एक लौटाई गई सूची एक बार बनाई गई थी या यदि यह किसी ऑब्जेक्ट की एक प्रति है। क्या इसका पता पता लगाना संभव है?मुझे सूची का पता कैसे प्राप्त किया जा सकता है?

// thread 1 
List<Object> list = supplier.get(); 
System.out.print("list: " + list + "@" + getAddress(list)); 

// thread 2 
List<Object> list = supplier.get(); 
System.out.print("list: " + list + "@" + getAddress(list)); 

getAddress(list) कैसा दिख सकता है? समस्या यह है कि hashCode() जो आमतौर पर एक पता देता है AbstractList में ओवरराइड किया गया है, इसलिए यह किसी पते के बजाय एक वैध हैश कोड लौटाएगा।

+0

मैं "क्या पता?" पूछने वाला था, लेकिन फिर मैंने इसे समझ लिया। हालांकि दिलचस्प सवाल है। – GGrec

उत्तर

6

क्या यह पता पता करना संभव है?

नहीं। हालांकि, आप संदर्भ समानता के लिए जाँच कर सकते हैं - जो आप सभी के बारे में परवाह है:

if (list1 == list2) 
{ 
    // They're the same 
} 

तुम सच में प्रवेश से ऐसा करना चाहते हैं, तो आप System.identityHashCode बजाय उपयोग कर सकते हैं, लेकिन हो सकता है जानते हैं कि यह एक पता माना जाने वाला था। यह अभी भी एक हैश कोड है, और अद्वितीय होने की गारंटी नहीं है। यह कुछ आंतरिक पते पर संबंधित हो सकता है, लेकिन यह भी गारंटी से बहुत दूर है।

8

मुझे लगता है कि आप चाहते हैं

System.identityHashCode(list); 

जावाडोक

के रूप में डिफ़ॉल्ट विधि hashCode (द्वारा लौटा दिया जाएगा दिया वस्तु के लिए एक ही हैश कोड देता है) का कहना है, कि क्या है या नहीं दिया ऑब्जेक्ट की कक्षा हैशकोड()।

+0

वाह! धन्यवाद, मुझे यही चाहिए। हालांकि मैं जॉन के जवाब को स्वीकार करूंगा, क्योंकि यह अधिक सटीक है। –

2

किसी ऑब्जेक्ट का पता जावा में तय नहीं किया गया है, यह स्थानांतरित हो सकता है, इसलिए आप इसे प्राप्त नहीं कर सकते हैं।

आप बस if(list1 == list2) क्यों नहीं देखते हैं?

+0

डाउनवॉटर कृपया मुझे बताएं कि मैंने क्या गलत कहा है। – Maroun

+1

अब मुझे इसका मतलब है - JVM ऑब्जेक्ट को स्थानांतरित कर सकता है ताकि उसका भौतिक पता बदल जाएगा। +1 –

संबंधित मुद्दे

 संबंधित मुद्दे