क्लास के कलाकारों के बजाय अशक्त सूचक क्यों?


26

जावा में:

int count = (Integer) null;

एक java.lang.NullPointerException फेंकता है।

यह प्रोग्रामर समझ में आसानी के लिए क्लास कास्ट एक्सेप्शन क्यों नहीं फेंकता है?

इस अपवाद को किसी अन्य अपवाद पर क्यों चुना गया?

जवाबों:


46

अपना कोड निष्पादित करते समय, जावा रनटाइम निम्नलिखित करता है:

  1. क्लास इंटेगर के एक ऑब्जेक्ट को कास्ट करें।
  2. IntValue () विधि को कॉल करके इंटगर ऑब्जेक्ट को इंट में अनबॉक्स करने का प्रयास करें
  3. एक अशक्त वस्तु पर एक विधि कॉलिंग एक NullPointerException फेंकता है।

दूसरे शब्दों में, null को समस्या के बिना Integer में डाला जा सकता है, लेकिन अशक्त पूर्णांक ऑब्जेक्ट को प्रकार int के मान में नहीं बदला जा सकता है।

संपादित करें

स्टैक ओवरफ्लो में मैंने कुछ समय पहले एक संबंधित प्रश्न किया था, यहां देखें ।


1

जावा सफलतापूर्वक एक पूर्णांक संदर्भ के लिए अशक्त बनाता है जो किसी वस्तु का संदर्भ नहीं देता है।

यह ठीक है क्योंकि असंबद्ध होना एक संदर्भ के लिए एक वैध स्थिति है।

यह एक गैर मौजूदा वस्तु की एक विधि का आह्वान है जिसे प्रदर्शन नहीं किया जा सकता है।

कलाकारों (Integer)nullका प्रदर्शन एक पूर्णांक चर घोषित करने और फिर इसे एक नया (या पहले से मौजूद) पूर्णांक ऑब्जेक्ट उदाहरण में विफल करने के समान है।


-1

वास्तव में बराबर है , यानी में Integerएक unbox करने के लिए ; जहां जैसा है लेकिन है ; फेंकता है क्योंकि तब बराबर होता है जो फेंकता है a ।intint i = new Integer(15);inew Integer(15).intValue() i = (Integer) oObject o = 15o = Integer.valueOf(15);i = nullNullPointerExceptioninull.intValue()NullPointerException


2
लगभग दो साल पहले स्वीकार किया गया उत्तर लगभग एक ही स्पष्टीकरण प्रदान करता है, लेकिन अधिक स्पष्ट है। यह उत्तर जावा 5+ के लिए भी सही नहीं है: यह अब valueOf()बॉक्सिंग के लिए नए उदाहरण बनाने के बजाय कारखाने के तरीकों का उपयोग करता है ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.