जैसा कि Damryfbfnetsi टिप्पणियों में बताते हैं , JLS has14.11 में निम्नलिखित नोट हैं:
null
स्विच लेबल के रूप में उपयोग करने के खिलाफ निषेध एक कोड को लिखने से रोकता है जिसे कभी भी निष्पादित नहीं किया जा सकता है। यदि switch
अभिव्यक्ति एक संदर्भ प्रकार की है, String
या एक बॉक्सिंग आदिम प्रकार या एक एनुम प्रकार है, तो एक रन-टाइम त्रुटि तब होगी जब अभिव्यक्ति null
रन टाइम पर मूल्यांकन करती है । जावा प्रोग्रामिंग भाषा के डिजाइनरों के फैसले में, यह पूरे switch
बयान को चुपचाप छोड़ देने या default
लेबल (यदि कोई हो) के बाद कथनों (यदि कोई हो) को निष्पादित करने के लिए चुनने से बेहतर परिणाम है ।
(जोर मेरा)
जबकि अंतिम वाक्य का उपयोग करने की संभावना से अधिक है case null:
, यह उचित लगता है और भाषा डिजाइनरों के इरादों में एक दृश्य प्रस्तुत करता है।
यदि हम कार्यान्वयन विवरणों को देखते हैं, तो क्रिश्चियन हुजेर के इस ब्लॉग पोस्टnull
में स्विच में अनुमति नहीं देने के बारे में कुछ व्यावहारिक अटकलें हैं (हालांकि यह enum
स्विच के बजाय स्विच पर केंद्रित है String
):
हुड के तहत, switch
बयान आम तौर पर एक tablesswitch बाइट कोड के लिए संकलन होगा। और "भौतिक" तर्क के switch
साथ-साथ इसके मामले भी हैं int
। स्विच करने का इंटिमेट वैल्यू विधि को लागू करके निर्धारित किया जाता है Enum.ordinal()
। [...] अध्यादेश शून्य से शुरू होते हैं।
इसका मतलब है कि मानचित्रण null
के लिए 0
एक अच्छा विचार नहीं होगा। पहले ईनम मान पर एक स्विच अशक्त से अप्रभेद्य होगा। हो सकता है कि यह एक अच्छा विचार रहा होगा कि 1. अध्यादेशों के लिए अध्यादेशों को गिनना शुरू किया जाए। हालांकि, इसे इस तरह परिभाषित नहीं किया गया है और इस परिभाषा को बदला नहीं जा सकता है।
जबकि String
स्विच अलग तरीके से कार्यान्वित किए जाते हैं , enum
स्विच पहले आया और संदर्भ के प्रकार को स्विच करने के लिए मिसाल दी गई है कि जब संदर्भ होता है तो व्यवहार करना चाहिए null
।