2011-06-28 13 views
6

क्या कोई बता सकता है कि hashCode को नीचे दिए गए उदाहरण में क्यों कहा जाता है?इस उदाहरण में हैशकोड क्यों कहा जाता है?

import java.util.List; 

public class JSSTest extends Object{ 

    public static void main(String args[]){ 

     JSSTest a = new JSSTest(); 
     JSSTest b = new JSSTest(); 
     List<JSSTest> list = new java.util.ArrayList<JSSTest>(); 
     list.add(a); 
     list.add(b); 
     System.out.println(list.get(0)); 
     System.out.println(list.get(1)); 
    } 

    @Override 
    public boolean equals(Object obj){ 
     System.out.println("equals"); 
     return false; 
    } 

    @Override 
    public int hashCode(){ 
     System.out.println("hashCode"); 
     return super.hashCode(); 
    } 
} 

परिणाम:

hashCode 0 
[email protected] 
hashCode 0 
[email protected] 
+1

क्या आपने एक स्टैक ट्रेस लेने या डीबगर में लाइन पर ब्रेकपॉइंट जोड़ने का प्रयास किया है? –

+2

यह संख्या '1bab50a' या 'c3c749' को देखने के लिए एक बड़ा संकेत होगा और देखें कि यह ऑब्जेक्ट के हैशकोड से कैसे तुलना करता है। –

उत्तर

15

डिफ़ॉल्ट toString() कार्यान्वयन hashCode पर कॉल करता है। इसमें सूचियों के साथ कुछ लेना देना नहीं है।

public class JSSTest { 

    public static void main(String args[]){ 
     JSSTest test = new JSSTest(); 
     // Just to show it's not part of creation... 
     System.out.println("After object creation"); 
     test.toString(); 
    } 

    @Override 
    public boolean equals(Object obj){ 
     System.out.println("equals"); 
     return false; 
    } 

    @Override 
    public int hashCode(){ 
     System.out.println("hashCode"); 
     return super.hashCode(); 
    } 
} 

(आप toString() भी ओवरराइड// सुपर कॉल करने से पहले प्रदर्शित करने के लिए विवरण के बाद कर सकते हैं।)

यह Object.toString() में दर्ज है:

यहाँ एक काफी कम से कम रेप्रो है कक्षा ऑब्जेक्ट के लिए ToString विधि उस श्रेणी के नाम से युक्त स्ट्रिंग देता है जिसमें ऑब्जेक्ट एक उदाहरण है, पर हस्ताक्षर वर्ण '@', और हस्ताक्षरित वह ऑब्जेक्ट के हैश कोड का xadecimal प्रतिनिधित्व। दूसरे शब्दों में, इस विधि एक स्ट्रिंग के मूल्य के बराबर रिटर्न:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
7
System.out.println(list.get(0)); 

मेरा मानना ​​है कि यह है कि सभी वस्तुओं को जब तक आप अपनी खुद की कक्षा में toString() ओवरराइड है विधि Object.toString() का हिस्सा है। कोशिश करो और देखें।

+0

Thx। यह भी सही है लेकिन केवल एक सही उत्तर को चिह्नित कर सकता है। आपको टिक टिक दिया :) – JSS

6

Object में toString() कार्यान्वयन यह कहता है क्योंकि ..

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    } 

ओवरराइट toString, और यह नहीं होगा

+0

Thx। यह भी सही है लेकिन केवल एक सही उत्तर को चिह्नित कर सकता है। आपको टिक टिक दिया :) – JSS

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