मुझे नहीं पता कि यह एक इंट के रूप में लंबे डेटा प्रकार की बात क्यों कर रहा है
यह नहीं। आपको संकलक के संदेशों पर भरोसा करना सीखना चाहिए (विशेषकर जब वे समझदार, आधुनिक संकलक हों और प्राचीन C / C ++ संकलक न हों)। जबकि वे जो भाषा बोलते हैं, उसे कई बार समझना मुश्किल हो सकता है, लेकिन वे आमतौर पर आपसे झूठ नहीं बोलते हैं।
आइए इसे फिर से देखें:
इंट 9223372036854775807 का शाब्दिक सीमा से बाहर है।
ध्यान दें, कि यह आपके चर या प्रकार का कहीं भी उल्लेख नहीं करता है , इसलिए यह आरंभीकरण के बारे में नहीं है। समस्या किसी अन्य बिंदु पर होने लगती है।testLong
long
अब संदेश के कुछ हिस्सों की जांच करने देता है:
int
हमें बताता है कि वह एक int
मूल्य के रूप में कुछ करना चाहता है (जो आप चाहते थे वह नहीं है!)
- "सीमा से बाहर" बहुत स्पष्ट है: कुछ अपेक्षित सीमा के भीतर नहीं है (शायद वह
int
)
- "शाब्दिक": अब यह दिलचस्प है: एक शाब्दिक क्या है?
मैं एक पल के लिए शाब्दिक के बारे में बात करने के लिए आरामदायक सूची छोड़ दूँगा: शाब्दिक वे स्थान हैं जहाँ आपके कोड में कुछ मूल्य हैं। हैं String
शाब्दिक, int
शाब्दिक, class
शाब्दिक और इतने पर। हर बार जब आप अपने कोड में एक मूल्य का स्पष्ट रूप से उल्लेख करते हैं, तो यह एक शाब्दिक है।
तो यह वास्तव में आपको चर घोषणा के बारे में परेशान नहीं कर रहा है, लेकिन खुद संख्या, मूल्य यह है कि यह आपके बारे में क्या कर रहा है।
आप एक संदर्भ में एक ही शाब्दिक का उपयोग करके इसे आसानी से सत्यापित कर सकते हैं जहां a long
और int
समान रूप से स्वीकार्य हैं:
System.out.println(9223372036854775807);
PrintStream.println
या तो एकint
या एकlong
(या बहुत कुछ और) ले सकते हैं । ताकि कोड ठीक होना चाहिए, है ना?
नहीं। ठीक है, शायद यह चाहिए हो, लेकिन नियमों के अनुसार यह है ठीक नहीं।
समस्या यह है कि "कुछ अंक" को एक int
शाब्दिक के रूप में परिभाषित किया गया है और इसलिए इसके द्वारा परिभाषित सीमा में होना चाहिए int
।
यदि आप एक लिखने के लिए चाहते हैं, तो long
शाब्दिक, तो आप उस जोड़कर स्पष्ट करना चाहिए L
(या लोअर केस l
, लेकिन मैं अत्यधिक , सुझाव है कि आप हमेशा अपर-केस भिन्न रूप का उपयोग, क्योंकि यह एक के लिए बहुत आसान को पढ़ने के लिए है और कठिन गलती करने के लिए 1
)।
ध्यान दें कि एक समान समस्या float
(पोस्टफ़िक्स F
/ f
) और double
(पोस्टफ़िक्स D
/ d
) के साथ होती है।
साइड नोट: आपको पता चलेगा कि कोई शाब्दिक byte
या short
शाब्दिक नहीं हैं और आप अभी भी मान (आमतौर पर int
शाब्दिक) असाइन कर सकते हैं byte
और short
चर कर सकते हैं: यह असाइनमेंट कन्वर्सेशन के बारे में possible 5.2 में विशेष नियमों के कारण संभव है : वे एक बड़े प्रकार के निरंतर अभिव्यक्ति के असाइनमेंट की अनुमति देते हैं करने के लिए byte
, short
, char
या int
अगर मान प्रकार के भीतर लेकर कर रहे हैं।