86

डबल .parseDouble (शून्य) और Integer.parseInt (शून्य) अलग अपवाद क्यों फेंकते हैं?डबल .parseDouble (शून्य) और Integer.parseInt (शून्य) क्यों अलग अपवाद फेंकते हैं?

क्या यह एक ऐतिहासिक दुर्घटना या जानबूझकर है? प्रलेखन स्पष्ट रूप से Double.parseDouble(...) के लिए अपवाद के दो प्रकार के और Integer.parseInt() के लिए एक में कहा गया है, लेकिन यह असंगत लगता है:

Integer.parseInt(null); // throws java.lang.NumberFormatException: null 
हालांकि

Double.parseDouble(null); // throws java.lang.NullPointerException 
+2

@Aquillo: 'डबल' आदिम http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – nhahtdh

+2

संबंधित विधियों के स्रोत कोड की जांच कर रहा है, यह केवल एक असंगतता की तरह लगता है। 'parseDouble' एक शून्य जांच नहीं करता है, और जब सामना किया जाता है तो बस एक एनपीई फेंकता है, लेकिन' parseInt' में, तो इनपुट स्ट्रिंग को 'शून्य' के लिए चेक किया जाता है। मुझे कोई अच्छा कारण नहीं दिख रहा है कि उन्हें अलग व्यवहार क्यों करना चाहिए। – NilsH

+0

मैंने जांच की है कि वे समान NumberFormatException फेंक देते हैं। – twlkyao

उत्तर

65

यह सुनिश्चित करना उचित है कि समान अपवादों को शून्य के लिए फेंक दिया जाए; हालांकि, ये एपीआई बहुत पुराने हैं और इस बिंदु पर बदला नहीं जा सकता है।

और:

के बाद से अपवाद व्यवहार लंबे समय से और JavaDoc में निर्दिष्ट है, यह इस समय किसी भी विधि का व्यवहार बदलने के लिए अव्यावहारिक है। बंद होने के रूप में बंद नहीं होगा।

से लिया के रूप में: Bug Report: Integer.parseInt() and Double.parseDouble() throw different exceptions on null.

की तरह दूसरों ने कहा है: यह संभव है अलग-अलग लेखकों द्वारा बनाया गया है।

+1

संबंधित और रोचक बग रिपोर्ट: http://bugs.sun.com/view_bug.do?bug_id=6463998 जावा 6 की तरह लगता है, डबल/फ्लोट क्लास से पार्स विधि एनपीई फेंकता है। – nhahtdh

+2

अमूर्त रूप से, टिप्पणी ने कहा कि इस कार्यक्षमता उस समय "बहुत पुरानी" थी, * और वह 15 साल पहले थी। –

56

नोट: इस पोस्ट में सब कुछ Java7-b147 के स्रोत में है

Double.parseDouble() एक सूर्य पुस्तकालय में चला जाता है (sun.misc.FloatingDecimal में) पहली महत्वपूर्ण बात यह है कि होता है:

in = in.trim(); // don't fool around with white space. 
       // throws NullPointerException if null 

Integer.parseInt()Integer कक्षा में मैन्युअल रूप से किया जाता है। पहली महत्वपूर्ण बात यह होती है कि:

if (s == null) { 
    throw new NumberFormatException("null"); 
} 

मुझे लगता है कि दो अलग-अलग लेखक हैं।

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