लघु मूल्य जावा की स्थापना


114

मैं J2ME में थोड़ा कोड लिख रहा हूं। मेरे पास एक विधि के साथ एक वर्ग है setTableId(Short tableId)। अब जब मैं लिखने की कोशिश करता हूं तो setTableId(100)यह संकलन समय त्रुटि देता है। मैं एक और लघु चर घोषित किए बिना लघु मूल्य कैसे निर्धारित कर सकता हूं?

Longमूल्य सेट करते समय मैं उपयोग कर सकता हूं setLongValue(100L)और यह काम करता है। तो, Lयहाँ क्या मतलब है और Shortमूल्य के लिए चरित्र क्या है ?

धन्यवाद


Lएक longशाब्दिक संकेत करने के लिए इस्तेमाल किया गया प्रत्यय है ।
लापता फकीर

जवाबों:


174

जावा में, पूर्णांक शाब्दिक डिफ़ॉल्ट रूप से प्रकार के होते हैं। कुछ अन्य प्रकार के लिए, आप की तरह एक केस-संवेदी पत्र के साथ शाब्दिक प्रत्यय हो सकता है L, D, Fएक लंबे, डबल, या नाव, क्रमशः निर्दिष्ट करने के लिए। ध्यान दें कि बेहतर पठनीयता के लिए अपरकेस अक्षरों का उपयोग करना आम बात है।

जावा लैंग्वेज स्पेसिफिकेशन बाइट या शॉर्ट टाइप के लिए समान सिंटैक्टिक शुगर प्रदान नहीं करता है। इसके बजाय, आप इसे स्पष्ट कास्टिंग का उपयोग करके घोषित कर सकते हैं:

byte foo = (byte)0;
short bar = (short)0;

आपके setLongValue(100L)विधि कॉल में, आपको आवश्यक रूप से Lप्रत्यय को शामिल करने की आवश्यकता नहीं है क्योंकि इस मामले में इंट शाब्दिक स्वचालित रूप से लंबे समय तक चौड़ा हो जाता है। इसे जावा लैंग्वेज स्पेसिफिकेशन में व्यापक आदिम रूपांतरण कहा जाता है।


16
अन्य प्रकारों के लिए भी प्रत्यय हैं: d/ और Dएक / doubleऔर एक फ्लोट बनाता है! fF
जोकिम सॉयर

6
इसके अलावा: आकार में फिट होने वाले शाब्दिकों को कास्ट करने की आवश्यकता नहीं है: आपके दो उदाहरण कलाकारों के बिना भी काम करते हैं।
जोआचिम सॉयर

तुम दोनों पर सही हो। मुझे अधिक स्पष्ट होना चाहिए था कि मैं यहाँ पूर्णांक शाब्दिकों के बारे में बात कर रहा हूँ, फ़्लोटिंग-पॉइंट शाब्दिकों के बारे में नहीं।
लॉरी

4
@ जोशीम: केवल J5 + के लिए आवश्यक कोई कास्ट नहीं; J2ME दुर्भाग्य से अभी भी J4 पर है (गंभीर रूप से छीन लिया गया J4)।
लॉरेंस डॉल

2
@JoachimSauer, "आकार में फिट" का क्या अर्थ है? मैं पूछ रहा हूं क्योंकि मुझे केवल एक त्रुटि के आसपास प्राप्त करने के लिए विशेष 0रूप (short)0से डालना था possible lossy conversion from int to short, भले ही 0 एक छोटा हो।
रेवंतेज

34

बाइट या शॉर्ट शाब्दिक जैसी कोई चीज नहीं है। आपको लघु प्रयोग करने की आवश्यकता है(short)100


9

आम तौर पर आप सिर्फ एक बनने के लिए चर कास्ट कर सकते हैं short

आपको इस तरह की समस्याएं भी हो सकती हैं जो भ्रामक हो सकती हैं। ऐसा इसलिए है क्योंकि +ऑपरेटर उन्हें बढ़ावा देता है aint

यहां छवि विवरण दर्ज करें

तत्वों को कास्टिंग करने से मदद नहीं मिलेगी:

यहां छवि विवरण दर्ज करें

आपको अभिव्यक्ति देने की आवश्यकता है:

यहां छवि विवरण दर्ज करें


1
मत भूलो वहाँ एक कारण है क्यों लघु + लघु = int। यदि दो शॉर्ट्स का योग मशीन के अधिकतम छोटे मूल्य से अधिक है, तो इसे शॉर्ट को कास्टिंग करना या तो अप्रत्याशित परिणाम देगा या एक अपवाद फेंक देगा, यदि लेसेज द्वारा समर्थित है।
DGoiko

2
उस तर्क के साथ, दो ints जोड़ने से एक लंबी वापसी होगी;)
मैट

1
और मुझे लगता है कि अगर मेरी रकम Integer.MAX_VALUE को पार कर सकती है। मैं इंट रिटर्निंग के फैसले का बचाव नहीं कर रहा हूं (जो संभवत: जिस तरह से एचडब्ल्यू वास्तव में रकम का प्रदर्शन करता है) से जुड़ा हुआ है, मैं सिर्फ यह कह रहा हूं कि लोगों को यह पुष्टि करनी चाहिए कि परिणाम वास्तव में इसे डालने से पहले थोड़ी देर में भर जाता है। मैंने इंट असवेल कैपिंग की तुलना में कम क्षमता के कैपिंग से अधिक बग्स का सामना किया है, शायद इसमें शामिल संख्याओं के आकार के कारण। शॉर्ट कैप अप के लिए 2 छोटे बाइट्स जावा
जलाशय

1
मैंने अपनी टिप्पणी फिर से पढ़ी और मैंने अपनी बात स्पष्ट नहीं की। पहला वाक्य भ्रामक है और मुझे यह नहीं कहना चाहिए था कि अभी बाकी को छोड़ दिया है, ऐसा लग रहा है कि दो संबंधित कथन हैं। संक्षिप्त + लघु के पीछे का कारण यहां पढ़ा जा सकता है: docs.oracle.com/javase/specs/ jvms / se8 / html /… , JVM में शॉर्ट के लिए कोई राशि नहीं है। जावा का int 32 बिट्स है, और जब यह डिकंसीशन जहां बनाया गया था, तो अधिकांश कंप्यूटर 32 बिट्स थे, इसलिए int सबसे अच्छा विचार था, मुझे लगता है।
DGoiko

1
यह भी ध्यान दें, जैसा कि यहां बताया गया है stackoverflow.com/a/27123302/9465588 , JVM ने वास्तव में प्रति क्लास फ़ील्ड में अपने वर्चुअल मेमोरी स्पेस के कम से कम 32 बिट्स सेवित किए, इसलिए छोटे क्षेत्रों की घोषणा करने से मेमोरी बिल्कुल भी नहीं बचती है। मुझे नहीं पता कि जावा ने इसे बदला है या नहीं। मैं लघु मूल्यों का उपयोग कभी नहीं करता हूं जब तक कि एक बाहरी प्रतिबंध शामिल न हो, जैसे कि डीएओ में
DGoiko

8

आप उपयोग कर सकते हैं setTableId((short)100)। मुझे लगता है कि इसे जावा 5 में बदल दिया गया था, ताकि लक्ष्य के लिए बाइट या शॉर्ट और रेंज के लिए असाइन किए गए संख्यात्मक शाब्दिक रूप से स्वचालित रूप से लक्ष्य प्रकार मान लिया जाए। यह नवीनतम J2ME JVM जावा 4 से लिया गया है, हालांकि।


पुनश्च: J2ME के ​​लिए कोडिंग के मध्यम आयु के दर्द में फंसने का स्वागत है। वर्ष 2000 के डेस्कटॉप को पकड़ने के लिए हाथ से पकड़े जाने वाले उपकरणों का इंतजार नहीं किया जा सकता।
लॉरेंस डॉल

3
कोई "J4" (और कोई "J5" नहीं है। कृपया Java वर्जनिंग / नामकरण स्कीम को पहले से कहीं अधिक भ्रामक नहीं बनाएं।
जोकिम सॉयर

2
@ जोशिम: जावा 1, जावा 2, जावा 5, जावा 6 और जावा 7 अच्छी तरह से ज्ञात हैं और इसलिए संदर्भित हैं; यह जावा 3 और जावा 4 का मतलब क्या होगा, यह एक्सट्रा प्रॉपलेट करना बहुत मुश्किल नहीं है। "Jn" केवल स्पष्ट रूप से संक्षिप्त नाम है। सभी संस्करणों के लिए सूर्य के वर्तमान (और उम्मीद के मुताबिक अंतिम) नामकरण को अपनाने से भ्रम की स्थिति कम हो जाती है।
लॉरेंस डॉल

2
@ जोशिम: इस विषय पर सूर्य के अंतिम शब्द के अनुसार, प्रमुख "1." जावा "1.x" को इस तरह से व्यवहार किया जाना चाहिए जैसे कि चर्चा में संस्करणों का उल्लेख करते समय ऐसा कभी नहीं हुआ, और केवल संगतता के लिए जेवीएम द्वारा उत्सर्जित संस्करण में बनाए रखा जा रहा है। इस प्रकार, जावा 2 वह संस्करण है जिसे पहले 1.2 के रूप में जाना जाता था, जहां से J2SE मूल रूप से आया था (आप ध्यान दें कि उसी समय सूर्य ने J2xE का उपयोग करने की अनुशंसा नहीं की थी, बल्कि JavaEE, JavaSE और JavaME)। यह इस प्रकार है कि 1.3 जावा 3 है, 1.4 जावा 4 है, 1.5 जावा 5 है, 1.6 जावा 6 है और 1.7 जावा 7 है। गंभीरता से, यह तर्क करने के लिए कठिन नहीं है।
लॉरेंस डॉल

2
"1." था केवल जावा 5 में और बाद में की कटौती। जावा 1.0-1.4 को हमेशा सूर्य द्वारा उस नाम से संदर्भित किया जाता है। और यह जानबूझकर किया जाता है, क्योंकि जावा 1.5 / जावा 5 तक जावा 1.2 को संदर्भित करने के लिए सूर्य ने "जावा 2" का उपयोग किया है। यह बहुत भ्रामक है, लेकिन नए नामों का आविष्कार करना जो सूर्य ने कभी उपयोग नहीं किया, यह कोई आसान नहीं बनाता है।
जोकिम सॉयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.