1. टाइपकास्टिंग
आदिम प्रकार के चर (प्रकार के अपवाद के साथ boolean
) का उपयोग विभिन्न प्रकार की संख्याओं को संग्रहीत करने के लिए किया जाता है। हालाँकि चर के प्रकार कभी नहीं बदले, एक स्थान है जहाँ आप एक प्रकार से दूसरे में परिवर्तित कर सकते हैं। और वह जगह है असाइनमेंट ।
विभिन्न प्रकार के चर एक दूसरे को सौंपे जा सकते हैं। जब आप ऐसा करते हैं तो एक प्रकार के चर का मान दूसरे प्रकार के मान में परिवर्तित हो जाता है और दूसरे चर को सौंपा जाता है। इस संबंध में, हम दो प्रकार के रूपांतरणों की पहचान कर सकते हैं: चौड़ा करना और संकुचित करना।
चौड़ा करना एक मूल्य को एक छोटी टोकरी से एक बड़ी टोकरी में ले जाने जैसा है: यह ऑपरेशन निर्बाध और दर्द रहित है। संकीर्णता तब होती है जब आप किसी मूल्य को एक बड़ी टोकरी से एक छोटी टोकरी में ले जाते हैं: पर्याप्त जगह नहीं हो सकती है, और आपको कुछ दूर फेंकना होगा।
यहाँ प्रकार हैं, टोकरी के आकार के अनुसार क्रमबद्ध:
2. व्यापक प्रकार के रूपांतरण
एक संख्यात्मक प्रकार के चर को दूसरे संख्यात्मक प्रकार के चर के लिए निर्दिष्ट करना अक्सर आवश्यक होता है। आप उसे कैसे करते हैं?
जावा में 4 पूर्णांक प्रकार हैं:
प्रकार | आकार |
---|---|
byte |
1 byte |
short |
2 bytes |
int |
4 bytes |
long |
8 bytes |
छोटी टोकरियों में संग्रहीत चर को हमेशा बड़ी टोकरियों में संग्रहीत चरों को सौंपा जा सकता है।
int
, short
और वेरिएबल्स को वेरिएबल्स byte
को आसानी से असाइन किया जा सकता है । और वेरिएबल्स को वेरिएबल्स को असाइन किया जा सकता है । और चर को चर को सौंपा जा सकता है ।long
short
byte
int
byte
short
उदाहरण:
कोड | विवरण |
---|---|
|
यह कोड ठीक संकलित करेगा। |
छोटे से बड़े प्रकार में इस तरह के रूपांतरण को व्यापक प्रकार का रूपांतरण कहा जाता है।
वास्तविक संख्याओं के बारे में क्या?
उनके साथ सब कुछ समान है - आकार मायने रखता है:
प्रकार | आकार |
---|---|
float |
4 bytes |
double |
8 bytes |
float
double
चर को बिना किसी समस्या के चर को सौंपा जा सकता है । लेकिन पूर्णांक प्रकार के साथ चीजें अधिक दिलचस्प हैं।
आप किसी भी पूर्णांक चर को एक float
चर के लिए निर्दिष्ट कर सकते हैं। यहां तक कि long
प्रकार, जो 8 बाइट लंबा है। और आप जो चाहें असाइन कर सकते हैं - कोई भी पूर्णांक चर या float
चर - एक double
चर के लिए:
कोड | टिप्पणी |
---|---|
|
|
ध्यान दें कि पर्याप्त महत्वपूर्ण अंकों की कमी के कारण वास्तविक प्रकार में कनवर्ट करने से परिशुद्धता का नुकसान हो सकता है।
पूर्णांक से फ़्लोटिंग-पॉइंट नंबरों में कनवर्ट करते समय, संख्याओं के निचले क्रम के हिस्सों को छोड़ दिया जा सकता है। लेकिन चूंकि आंशिक संख्याओं को अनुमानित मानों को संग्रहित करने के लिए समझा जाता है, ऐसे असाइनमेंट ऑपरेशंस की अनुमति है।
3. संकीर्ण प्रकार के रूपांतरण
अन्य संभावनाओं के बारे में क्या? यदि आपको long
एक int
चर के लिए मान निर्दिष्ट करने की आवश्यकता है तो क्या होगा?
एक टोकरी के रूप में एक चर की कल्पना करो। हमारे पास विभिन्न आकारों के बास्केट हैं: 1, 2, 4 और 8 बाइट्स। सेब को छोटी टोकरी से बड़ी टोकरी में स्थानांतरित करना कोई समस्या नहीं है। लेकिन बड़ी टोकरी से छोटी टोकरी में जाने पर, कुछ सेब खो सकते हैं।
यह परिवर्तन - बड़े प्रकार से छोटे प्रकार में - एक संकीर्ण प्रकार रूपांतरण कहा जाता है । इस तरह एक असाइनमेंट ऑपरेशन करते समय, एक संख्या का हिस्सा नए चर में फिट नहीं हो सकता है और इसलिए उसे छोड़ दिया जा सकता है।
किसी प्रकार को संकुचित करते समय, हमें संकलक को स्पष्ट रूप से बताना चाहिए कि हम गलती नहीं कर रहे हैं, कि हम जानबूझकर संख्या का हिस्सा छोड़ रहे हैं। इसके लिए टाइपकास्ट ऑपरेटर का इस्तेमाल किया जाता है। यह कोष्ठक में एक प्रकार का नाम है ।
ऐसी स्थितियों में, जावा कंपाइलर को टाइपकास्ट ऑपरेटर निर्दिष्ट करने के लिए प्रोग्रामर की आवश्यकता होती है। सामान्य तौर पर, यह ऐसा दिखता है:
(type) expression
उदाहरण:
कोड | विवरण |
---|---|
|
हर बार टाइपकास्ट ऑपरेटर को स्पष्ट रूप से इंगित किया जाना चाहिए |
यहाँ a
के बराबर है 1
, और शायद टाइपकास्ट ऑपरेटर ओवरकिल जैसा लगता है। लेकिन क्या होगा अगर a
बड़े थे?
कोड | विवरण |
---|---|
|
|
एक मिलियन पूरी तरह से एक long
और एक में फिट बैठता है int
। लेकिन एक short
चर के लिए एक मिलियन असाइन करते समय, पहले दो बाइट्स को छोड़ दिया जाता है, और केवल अंतिम दो बाइट्स को बरकरार रखा जाता है। और a को असाइन करते समय byte
, केवल एक चीज जो बची रहती है वह है आखिरी बाइट।
स्मृति में संख्याओं को कैसे व्यवस्थित किया जाता है:
प्रकार | बाइनरी नोटेशन | दशमलव अंकन |
---|---|---|
int |
0बी 00000000 00001111 01000010 01000000 | 1000000 |
short |
0बी 01000010 01000000 | 16.960 |
byte |
0बी 01000000 | 64 |
char
प्रकार
A char
, a की तरह short
, दो बाइट्स लेता है, लेकिन एक को दूसरे में बदलने के लिए, आपको हमेशा टाइपकास्ट ऑपरेटर का उपयोग करने की आवश्यकता होती है। यहाँ मुद्दा यह है कि short
प्रकार पर हस्ताक्षर किए गए हैं और इसमें से मान शामिल हो सकते हैं -32,768
, +32,767
लेकिन char
प्रकार अहस्ताक्षरित है और 0
इसमें से मान शामिल हो सकते हैं 65,535
।
ऋणात्मक संख्याओं को a में संग्रहीत नहीं किया जा सकता है char
, लेकिन उन्हें a में संग्रहीत किया जा सकता है short
। और a short
से बड़ी संख्याओं को संग्रहीत नहीं कर सकता है 32,767
, लेकिन ऐसी संख्याओं को a में संग्रहीत किया जा सकता है char
।
4. एक अभिव्यक्ति का प्रकार
क्या होगा यदि एक ही अभिव्यक्ति में विभिन्न प्रकार के चर का उपयोग किया जाता है? तार्किक रूप से, हम समझते हैं कि उन्हें पहले एक सामान्य प्रकार में परिवर्तित करने की आवश्यकता है। पर कौनसा?
बड़े के लिए, बिल्कुल।
जावा हमेशा बड़े प्रकार में परिवर्तित होता है। मोटे तौर पर, पहले प्रकार में से एक को चौड़ा किया जाता है और उसके बाद ही उसी प्रकार के मूल्यों का उपयोग करके ऑपरेशन किया जाता है।
यदि a int
और a long
किसी व्यंजक में शामिल हैं, तो वसीयत का मान int
a में परिवर्तित हो जाएगा long
और उसके बाद ही संक्रिया आगे बढ़ेगी:
कोड | विवरण |
---|---|
|
a को चौड़ा किया जाएगा long और फिर जोड़ दिया जाएगा। |
दशमलव संख्याएं
यदि एक पूर्णांक और एक फ़्लोटिंग-पॉइंट नंबर ( float
या double
) एक अभिव्यक्ति में शामिल हैं, तो पूर्णांक को फ़्लोटिंग-पॉइंट नंबर ( float
या double
) में बदल दिया जाएगा, और उसके बाद ही ऑपरेशन किया जाएगा।
यदि ऑपरेशन में a float
और a शामिल है double
, तो इसे float
a में परिवर्तित कर दिया जाएगा double
। जो वास्तव में अपेक्षित है।
एक दूसरे के साथ बातचीत करते समय byte
, short
, और प्रकार char
हमेशा रूपांतरित होते हैं । int
एक अच्छा कारण है कि int
प्रकार को मानक पूर्णांक प्रकार क्यों माना जाता है।
यदि आप a को byte
a से गुणा करते हैं short
, तो आपको एक मिलता है int
। यदि आप a को byte
a से गुणा करते हैं byte
, तो आपको एक मिलता है int
। यदि आप a byte
और a जोड़ते हैं byte
, तो भी आपको एक मिलता है int
।
इसके अनेक कारण हैं। उदाहरण:
कोड | विवरण |
---|---|
|
110 * 120 है 13,200 , जो प्रकार के अधिकतम मूल्य से थोड़ा अधिक है byte :127 |
|
110 + 120 है 230 , जो कि प्रकार के अधिकतम मूल्य से थोड़ा अधिक है byte :127 |
सामान्य तौर पर, 8-बिट (1 बाइट) संख्या को 8-बिट (1 बाइट) संख्या से गुणा करते समय, हमें एक संख्या मिलती है जो 16-बिट्स बिट्स (2 बाइट्स) पर कब्जा कर लेती है।
नतीजतन, पूर्णांक प्रकार वाले सभी ऑपरेशन जो इससे छोटे होते हैं, int
हमेशा तुरंत int
एस में परिवर्तित हो जाते हैं। और इसका मतलब यह है कि यदि आप गणना के परिणाम को एक प्रकार के चर में संग्रहीत करना चाहते हैं जो a से छोटा है int
, तो आपको हमेशा टाइपकास्ट ऑपरेटर को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता होगी।
उदाहरण:
कोड | विवरण |
---|---|
|
अभिव्यक्ति byte * byte एक होगीint |
|
अभिव्यक्ति byte + byte एक होगीint |
|
अभिव्यक्ति byte + int एक होगी int शाब्दिक एक एक है int । |
5. एक महत्वपूर्ण बारीकियाँ
टाइपकास्ट ऑपरेटर की काफी उच्च प्राथमिकता होती है।
इसका अर्थ यह है कि यदि किसी व्यंजक में, उदाहरण के लिए, जोड़ और एक टाइपकास्ट ऑपरेटर शामिल है, तो जोड़ने से पहले टाइपकास्ट किया जाएगा।
उदाहरण:
कोड | विवरण |
---|---|
|
टाइपकास्ट ऑपरेटर केवल a वेरिएबल पर लागू होगा, जो पहले से ही एक byte . यह कोड संकलित नहीं होगा। |
|
यह सही तरीका है। |
यदि आप संपूर्ण अभिव्यक्ति को एक विशिष्ट प्रकार में बदलना चाहते हैं, न कि अभिव्यक्ति के केवल एक घटक के लिए, तो संपूर्ण अभिव्यक्ति को कोष्ठक में लपेटें और टाइपकास्ट ऑपरेटर को सामने रखें।
GO TO FULL VERSION