2010-10-28 21 views
9

क्यों String.valueOf (शून्य) शून्य सूचक अपवाद पैदा कर रहा है? जहां अपेक्षित व्यवहार "शून्य" स्ट्रिंग को वापस करना है।क्यों String.valueOf (शून्य) शून्य सूचक अपवाद पैदा कर रहा है?

String x = null; 
    System.out.println(String.valueOf(x)); 

यह एक "शून्य" स्ट्रिंग देता है। लेकिन

System.out.println(String.valueOf(null)); 

शून्य सूचक अपवाद का कारण बन जाएगा।

उत्तर

18

क्योंकि String.valueOf(null)char[] तर्क के साथ अधिभारित विधि को चुनता है, और फिर new String(null) कन्स्ट्रक्टर में विफल रहता है। यह विकल्प संकलन समय पर बनाया गया है।

आप स्पष्ट रूप से एक Object तर्क, उपयोग के साथ अतिभारित विधि का उपयोग करना चाहते हैं:

String.valueOf((Object) null) 

नोट है कि वहाँ कोई अतिभारित विधि एक String तर्क लेने - पहले मामले में लागू एक Object ले जा रहा है।

के शब्दों में JLS:

15.12.2 संकलन समय चरण 2: निर्धारित विधि हस्ताक्षर

दूसरे चरण के प्रकार सदस्य तरीकों के लिए पिछले चरण में निर्धारित खोज करता है। यह चरण विधियों के नाम और तर्क अभिव्यक्ति के प्रकारों का उपयोग करता है जो विधियों का पता लगाने के लिए सुलभ और लागू दोनों हैं, यानी, घोषणाएं जिन्हें दिए गए तर्कों पर सही तरीके से बुलाया जा सकता है। ऐसी एक से अधिक विधि हो सकती हैं, इस मामले में सबसे विशिष्ट एक चुना जाता है। सबसे विशिष्ट विधि का वर्णनकर्ता (हस्ताक्षर प्लस रिटर्न प्रकार) विधि प्रेषण करने के लिए रन टाइम पर उपयोग किया जाता है।

तरीकों में से

सभी लागू होते हैं, तो हम इस पर जाएं: सबसे विशिष्ट विधि

का चयन यदि एक से अधिक सदस्य विधि दोनों सुलभ और के लिए लागू है

15.12.2.5 एक विधि आमंत्रण, रन-टाइम विधि प्रेषण के लिए वर्णनकर्ता प्रदान करने के लिए एक चुनना आवश्यक है। जावा प्रोग्रामिंग भाषा नियम का उपयोग करती है कि सबसे विशिष्ट विधि चुना जाता है।

अनौपचारिक अंतर्ज्ञान यह है कि एक विधि किसी अन्य से अधिक विशिष्ट होती है यदि पहली विधि द्वारा संचालित किसी भी आमंत्रण को किसी अन्य को संकलित-समय प्रकार त्रुटि के बिना पारित किया जा सकता है।

polygenelubricants के लिए धन्यवाद - char[] और Object - - char[] सबसे विशिष्ट होता है केवल दो अतिभारित तरीकों एक वस्तु को स्वीकार कर रहे हैं।

+0

शून्य को किसी ऑब्जेक्ट के रूप में माना जाना चाहिए। यह चार [] के रूप में क्यों विचार कर रहा है? – Sujith

+3

@ सुजिथ: क्योंकि 'char []' * * एक ऑब्जेक्ट – skaffman

+0

@ सुजीत क्या आप ग्रहण, या जावैक का उपयोग कर रहे हैं? – Bozho

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