2010-10-13 13 views
9

यह आउटपुट क्यों करता है: "स्ट्रिंग तर्क विधि के अंदर"? शून्य "ऑब्जेक्ट" प्रकार नहीं है?क्या शून्य ऑब्जेक्ट प्रकार है?

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     a.printVal(null); 
    } 
} 
+1

वाह पागल। मैंने क्या किया होगा यह देखने के लिए मैंने अभी एक तीसरा 'प्रिंटवेल 'ओवरलोड,' प्रिंटवेल (इंटीजर ओबीजे) 'जोड़ने का प्रयास किया है। अब अस्पष्टता के कारण 'a.printVal (null) 'एक कंपाइलर त्रुटि है। अच्छा प्रश्न। – mgiuca

उत्तर

3

हाँ, पर अशक्त भी स्ट्रिंग प्रकार और अन्य सभी प्रकार के, तो यह कॉल करने के लिए सबसे विशिष्ट विधि का चयन करता है।

1

अधिक विशेष रूप से, nullशाब्दिक अन्य उत्तरों द्वारा उल्लिखित कारणों के लिए स्ट्रिंग संस्करण को कॉल करेगा।

दूसरी ओर:

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     Object myObj = null; 
     a.printVal(myObj); 
    } 
} 

"ऑब्जेक्ट तर्क विधि के अंदर।" प्रिंट होगा String के अलावा किसी भी प्रकार के myObj के लिए सेटिंग सेटिंग्स के रूप में।

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