JRL ने लिखा:
नहीं यह नहीं, ...
जैसा कि अक्सर, यह निर्भर करता है कि आप इसे कहाँ देखते हैं, आप किस पर अधिक विश्वास करते हैं।
जेएलएस के अनुसार, हाँ, यह है । विशेष रूप से यदि आप इस प्रश्न को फिर से जोड़ते हैं: r क्या nullशाब्दिक प्रकार है Object? ”। JLS 4.1 के अलावा ऊपर माइकल बोर्गवर्ड द्वारा उद्धृत:
देखें JLS 3.10.7 :
एक अशक्त शाब्दिक हमेशा अशक्त प्रकार का होता है।
और JLS 4.10 :
एक प्रकार टी के उपप्रकार सभी प्रकार यू हैं जैसे कि टी यू का एक सुपरटेप है, और अशक्त प्रकार है।
या JLS 4.10.2 :
अशक्त प्रकार के प्रत्यक्ष सुपरपाइप्स केवल नल प्रकार के अलावा सभी संदर्भ प्रकार हैं ।
[मेरे द्वारा जोर दिया गया।]
ग्रहण 2019-09 के संकलक के अनुसार यह नहीं है :
true.toString(); // Cannot invoke toString() on the primitive type boolean
null.toString(); // Cannot invoke toString() on the primitive type null
OpenJDKs 12.0.1 के अनुसार javac यह है :
true.toString(); // error: boolean cannot be dereferenced
null.toString(); // error: <null> cannot be dereferenced
जहां कोण कोष्ठक का मतलब है कि nullएक आदिम प्रकार के अलावा अन्य है। और जेएलएस 4.1 के अनुसार :
जावा प्रोग्रामिंग भाषा में दो प्रकार के प्रकार होते हैं: आदिम प्रकार (...) और संदर्भ प्रकार (...)।
अगर यह एक नहीं है तो यह दूसरा है।
क्लाउडिया ने लिखा:
अशक्त एक प्रकार का कुरूप है।
एयू गर्भनिरोधक, nullसुंदर है। इसके बजाय आप संदर्भ प्रकार चर के लिए डिफ़ॉल्ट मान के रूप में क्या सुझाव देंगे? एक मनमाना बिट संयोजन? उल्लंघन का उपयोग करने के लिए आपका स्वागत है या, इससे भी बदतर, सूचक नरक!
जोआचिम सौर ने लिखा:
नल एक प्रकार और मूल्य है।
नल के साथ वास्तव में तीन आइटम हैं ( JLS 3.10.7 भी देखें ):
- (अन्यथा अनाम) अशक्त प्रकार ।
null शाब्दिक ।
- अशक्त संदर्भ मूल्य। (आमतौर पर के रूप में संक्षिप्त शून्य मान या बस अशक्त ।)
(1) ध्यान दें कि, ऊपर वर्णित JLS 4.10.2 के अनुसार , अशक्त प्रकार न केवल इंटरफेस के लिए बल्कि कक्षाओं के लिए भी कई विरासत का उपयोग करता है। जो हम सभी जानते हैं कि हमारे लिए एप्लिकेशन प्रोग्रामर संभव नहीं है।
(२) अशक्त शाब्दिक की कल्पना एक चर के रूप में की जा सकती है:
JVM_global final null_type null = new null_type();
नोट JLS 3.9 :
कई प्रकार के चरित्र अनुक्रम कभी-कभी गलत तरीके से ग्रहण किए जाते हैं, कीवर्ड के लिए:
nullएक खोजशब्द नहीं है, बल्कि अशक्त शाब्दिक ( .73.10.7 ) है।
विषय में null instanceof <any type>
जेएलएस 4.10.2 को ध्यान में रखते हुए ( is अशक्त प्रकार हर प्रकार का एक उपप्रकार है) ’ null instanceof <any type>का मूल्यांकन करना trueचाहिए, क्या ऐसा नहीं होना चाहिए? पहली नजर में, हाँ, लेकिन JLS 15.20.2 अंतर्दृष्टि जवाब देता है:
[...] परिणाम के instanceofऑपरेटर है trueअगर मूल्य की RelationalExpression नहीं हैnull [...]। अन्यथा परिणाम हैfalse ।
[मेरे द्वारा जोर दिया गया।]
अपने आप से पूछें कि क्या अधिक समझ में आता है (एक आवेदन प्रोग्रामर के दृष्टिकोण से):
देते हुए falseऔर इस तरह इंगित करते हुए कि एक संदर्भ अभिव्यक्ति हमारे लिए एक प्रकार का नहीं है, अर्थात यह दर्शाता है कि यह हमारे लिए उपयोगी कुछ भी संदर्भित नहीं कर रहा है।
या trueइस प्रकार, हमें सूचित करते हुए कि अभिव्यक्ति एक विशेष संदर्भ, अशक्त संदर्भ का मूल्यांकन करती है , एक "वस्तु" का संदर्भ देते हुए, हम नहीं जानते कि क्या यह मौजूद है और जो विशेष शून्य प्रकार का है जिसका कोई नाम नहीं है, के संपर्क में नहीं है हमें, लेकिन अशक्त शाब्दिक के माध्यम से , किसी भी प्रकार की एक बहुउद्देशीयता सहित कई प्रकारों का एक उपप्रकार है और वैसे भी अनदेखा किया जाना है? अधिक व्यावहारिक उदाहरण पर भी विचार करें:
class Car implements Vehicle {
...
Vehicle car = null;
...
boolean b = car instanceof Car; // True? There's not even an instance
... // which could be of type Car.
जिसके कारण यह भी होता है:
क्यों instanceofकुछ के बारे में कहने का उचित तरीका नहीं हैnullऑब्जेक्ट-नेस के ?
इसे instanceofनहीं कहा जाता है sameorsubtypeof। इसका मतलब है कि हम एक उदाहरण के प्रकार की तुलना एक प्रकार से कर रहे हैं, दो प्रकारों से नहीं। अब nullइसका मतलब है: „कोई उदाहरण नहीं है” और अगर कोई उदाहरण नहीं है तो कोई उदाहरण नहीं है। यह स्पष्ट है कि किसी चीज़ के साथ कुछ भी तुलना करना नेतृत्व करने के लिए नहीं है false।
या "अधिक" वास्तविक दुनिया उदाहरण में:
- मेरे हाथ में एक सेब ( = संदर्भ प्रकार ) का वास्तविक आकार का चित्र है, जिस पर लिखा है »बिग एप्पल« ( = संदर्भ प्रकार नाम )।
- मेरे सामने एक टेबल ( = ढेर ) है।
- यदि मेज पर एक सेब ( = उदाहरण ) है तो उससे जुड़ा एक कॉर्ड ( = संदर्भ ) है।
- मैं अपने हाथ ( = संदर्भ चर ) में इस कॉर्ड के दूसरे छोर को पकड़ता हूं ।
- मैं कॉर्ड के साथ सेब का पता लगाता हूं और अपनी तस्वीर ( = इंस्टाफ ) से तुलना करता हूं ।
- यदि सेब एक ही आकार का है या चित्र से बड़ा है »बिग एप्पल« इस पर लागू होता है ( = सच) )।
- यदि यह छोटा है, तो ( = गलत नहीं है) )।
- यदि टेबल पर कोई सेब नहीं है (= कोई उदाहरण नहीं है ) और, इसलिए, कोई कॉर्ड मौजूद नहीं है ( = null ) लेखन या तो लागू नहीं होता है ( = गलत )। क्योंकि: क्या कोई सेब बड़ा सेब नहीं है? नहीं यह नहीं।
जैसा कि माइकल ने कहा है: "अशक्त विशेष है"।