1. टाइपकास्टिंग
आदिम प्रकारांचे चल (प्रकार अपवाद वगळता boolean
) विविध प्रकारच्या संख्या संग्रहित करण्यासाठी वापरले जातात. व्हेरिएबल्सचे प्रकार कधीही बदलले नसले तरी, अशी जागा आहे जिथे तुम्ही एका प्रकारातून दुसऱ्या प्रकारात रूपांतरित करू शकता. आणि ती जागा असाइनमेंट आहे .
वेगवेगळ्या प्रकारचे व्हेरिएबल्स एकमेकांना नियुक्त केले जाऊ शकतात. जेव्हा तुम्ही हे करता तेव्हा एका प्रकारच्या व्हेरिएबलचे मूल्य दुसर्या प्रकारच्या व्हेरिएबलमध्ये रूपांतरित केले जाते आणि दुसर्या व्हेरिएबलला नियुक्त केले जाते. या संदर्भात, आम्ही दोन प्रकारचे रूपांतरण ओळखू शकतो: रुंदीकरण आणि अरुंद करणे.
रुंदीकरण हे मूल्य लहान टोपलीतून मोठ्या आकारात हलवण्यासारखे आहे: हे ऑपरेशन अखंड आणि वेदनारहित आहे. जेव्हा तुम्ही मूल्य मोठ्या टोपलीतून एका लहान टोपलीत हलवता तेव्हा संकुचित होते: तेथे पुरेशी जागा नसू शकते आणि तुम्हाला काहीतरी फेकून द्यावे लागेल.
बास्केट आकारानुसार क्रमवारी लावलेले प्रकार येथे आहेत:
2. प्रकार रूपांतरणे रुंद करणे
एका अंकीय प्रकाराचे व्हेरिएबल दुसर्या संख्यात्मक प्रकाराच्या व्हेरिएबलला नियुक्त करणे अनेकदा आवश्यक असते. तुम्ही ते कसे करता?
Java मध्ये 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 बाइट्स. सफरचंद लहान टोपलीतून मोठ्या बास्केटमध्ये हस्तांतरित करणे ही समस्या नाही. परंतु मोठ्या टोपलीतून लहान टोपलीकडे जाताना, काही सफरचंद गमावले जाऊ शकतात.
हे परिवर्तन — मोठ्या प्रकारातून लहान प्रकारात — याला संकुचित प्रकार रूपांतरण म्हणतात . अशा प्रकारे असाइनमेंट ऑपरेशन करत असताना, संख्येचा काही भाग नवीन व्हेरिएबलमध्ये बसू शकत नाही आणि म्हणून टाकून दिला जाऊ शकतो.
एखादे प्रकार संकुचित करताना, आम्ही कंपायलरला स्पष्टपणे सांगणे आवश्यक आहे की आम्ही चूक करत नाही आहोत, आम्ही मुद्दाम क्रमांकाचा काही भाग टाकून देत आहोत. यासाठी टाइपकास्ट ऑपरेटरचा वापर केला जातो. हे कंसात एक प्रकारचे नाव आहे .
अशा परिस्थितीत, Java कंपाइलरला प्रोग्रामरला टाइपकास्ट ऑपरेटर निर्दिष्ट करणे आवश्यक आहे. सर्वसाधारणपणे, हे असे दिसते:
(type) expression
उदाहरणे:
कोड | वर्णन |
---|---|
|
प्रत्येक वेळी टाइपकास्ट ऑपरेटर स्पष्टपणे सूचित करणे आवश्यक आहे |
येथे a
समान आहे 1
, आणि कदाचित टाइपकास्ट ऑपरेटर ओव्हरकिल सारखे दिसते. पण a
मोठे असते तर?
कोड | वर्णन |
---|---|
|
|
एक दशलक्ष a long
आणि a मध्ये उत्तम प्रकारे बसते int
. परंतु व्हेरिएबलला एक दशलक्ष असाइन करताना short
, पहिले दोन बाइट टाकून दिले जातात आणि फक्त शेवटचे दोन बाइट्स राखले जातात. आणि a ला नियुक्त करताना byte
, फक्त शेवटची बाइट शिल्लक राहते.
मेमरीमध्ये क्रमांक कसे व्यवस्थित केले जातात:
प्रकार | बायनरी नोटेशन | दशांश अंकन |
---|---|---|
int |
0b 00000000 00001111 01000010 01000000 | 1000000 |
short |
0b 01000010 01000000 | 16.960 |
byte |
0b 01000000 | 64 |
char
प्रकार
A char
, a प्रमाणे short
, दोन बाइट्स व्यापतात, परंतु एक दुसऱ्यामध्ये रूपांतरित करण्यासाठी, तुम्हाला नेहमी टाइपकास्ट ऑपरेटर वापरण्याची आवश्यकता असते. येथे समस्या अशी आहे की प्रकार स्वाक्षरी केलेला आहे आणि त्यात ते short
पासून मूल्ये असू शकतात , परंतु प्रकार स्वाक्षरी नसलेला आहे आणि त्यात ते पासून मूल्ये असू शकतात .-32,768
+32,767
char
0
65,535
ऋण संख्या a मध्ये संग्रहित केली जाऊ शकत नाहीत char
, परंतु त्या a मध्ये संग्रहित केल्या जाऊ शकतात short
. आणि short
पेक्षा मोठी संख्या संचयित करू शकत नाही 32,767
, परंतु अशा संख्या a मध्ये संग्रहित केल्या जाऊ शकतात char
.
4. अभिव्यक्तीचा प्रकार
जर एकाच अभिव्यक्तीमध्ये भिन्न प्रकारची चल वापरली गेली तर? तार्किकदृष्ट्या, आम्ही समजतो की त्यांना प्रथम सामान्य प्रकारात रूपांतरित करणे आवश्यक आहे. पण कोणते?
मोठ्या, अर्थातच.
Java नेहमी मोठ्या प्रकारात रूपांतरित होते. ढोबळपणे सांगायचे तर, एक प्रकार प्रथम रुंद केला जातो आणि त्यानंतरच त्याच प्रकारच्या मूल्यांचा वापर करून ऑपरेशन केले जाते.
जर a int
आणि a long
अभिव्यक्तीमध्ये सामील असेल तर, चे मूल्य int
a मध्ये रूपांतरित केले जाईल long
आणि त्यानंतरच ऑपरेशन पुढे जाईल:
कोड | वर्णन |
---|---|
|
a a पर्यंत रुंद केले जाईल long आणि नंतर जोडणी होईल. |
फ्लोटिंग-पॉइंट संख्या
पूर्णांक आणि फ्लोटिंग-पॉइंट नंबर ( float
किंवा double
) अभिव्यक्तीमध्ये सामील असल्यास, पूर्णांक फ्लोटिंग-पॉइंट नंबर ( float
किंवा double
) मध्ये रूपांतरित केला जाईल आणि त्यानंतरच ऑपरेशन केले जाईल.
जर ऑपरेशनमध्ये a float
आणि a समाविष्ट असेल double
, तर ते float
a मध्ये रूपांतरित केले जाईल double
. जे प्रत्यक्षात अपेक्षित आहे.
एकमेकांशी संवाद साधताना byte
, short
आणि प्रकार char
नेहमी मध्ये रूपांतरित केले जातात . प्रकार हा मानक पूर्णांक प्रकार मानला जाण्याचे int
एक चांगले कारण आहे .int
तुम्ही byte
a चा a ने गुणाकार केल्यास short
तुम्हाला एक मिळेल int
. तुम्ही byte
a चा a ने गुणाकार केल्यास byte
तुम्हाला एक मिळेल int
. byte
तुम्ही a आणि a जोडले तरीही byte
तुम्हाला एक मिळेल int
.
याची अनेक कारणे आहेत. उदाहरणे:
कोड | वर्णन |
---|---|
|
110 * 120 आहे 13,200 , जे प्रकाराच्या कमाल मूल्यापेक्षा किंचित मोठे आहे byte :127 |
|
110 + 120 आहे 230 , जे प्रकाराच्या कमाल मूल्यापेक्षा किंचित मोठे आहे byte :127 |
सर्वसाधारणपणे, 8-बिट (1 बाइट) संख्येचा 8-बिट (1 बाइट) संख्येने गुणाकार करताना, आपल्याला 16-बिट बिट्स (2 बाइट) व्यापलेली संख्या मिळते.
परिणामी, पेक्षा लहान असलेल्या पूर्णांक प्रकारांसह सर्व ऑपरेशन्स int
नेहमी लगेच int
s मध्ये रूपांतरित होतात. आणि याचा अर्थ असा की जर तुम्हाला गणनेचा परिणाम एखाद्या पेक्षा लहान असलेल्या व्हेरिएबलमध्ये संग्रहित करायचा असेल int
, तर तुम्हाला नेहमी टाईपकास्ट ऑपरेटर स्पष्टपणे निर्दिष्ट करावा लागेल.
उदाहरणे:
कोड | वर्णन |
---|---|
|
अभिव्यक्ती byte * byte एक असेलint |
|
अभिव्यक्ती byte + byte एक असेलint |
|
अभिव्यक्ती byte + int एक असेल int शाब्दिक एक एक आहे int . |
5. एक महत्वाची सूक्ष्मता
टाइपकास्ट ऑपरेटरला बर्यापैकी उच्च प्राधान्य आहे.
याचा अर्थ असा की जर एखाद्या अभिव्यक्तीमध्ये, उदाहरणार्थ, जोड आणि टाइपकास्ट ऑपरेटर असेल तर, जोडण्यापूर्वी टाइपकास्ट केले जाईल.
उदाहरण:
कोड | वर्णन |
---|---|
|
टाइपकास्ट ऑपरेटर फक्त व्हेरिएबलवर लागू केला जाईल a , जो आधीपासून आहे byte . हा कोड संकलित होणार नाही. |
|
हा योग्य मार्ग आहे. |
जर तुम्हाला संपूर्ण अभिव्यक्ती विशिष्ट प्रकारात रूपांतरित करायची असेल, आणि केवळ अभिव्यक्तीचा एक घटक नाही, तर संपूर्ण अभिव्यक्ती कंसात गुंडाळा आणि टाइपकास्ट ऑपरेटर समोर ठेवा.