जावा में रूपांतरण और प्रचार
इस लेख में हम आदिम रूपांतरण पर चर्चा करेंगे ।
· प्रकार रूपांतरण
∘ अंतर्निहित प्रकार रूपांतरण
∘ स्पष्ट प्रकार रूपांतरण
· अभिव्यक्तियों में स्वचालित प्रकार का प्रचार
· प्रकार कास्टिंग और प्रकार ज़बरदस्ती के बीच अंतर
कंप्यूटर विज्ञान में, टाइप रूपांतरण , टाइप कास्टिंग , टाइप ज़बरदस्ती , और टाइप जुगलिंग एक अभिव्यक्ति को एक डेटा प्रकार से दूसरे में बदलने के विभिन्न तरीके हैं। एक उदाहरण एक पूर्णांक मान का फ़्लोटिंग पॉइंट मान में रूपांतरण या स्ट्रिंग के रूप में इसका शाब्दिक प्रतिनिधित्व होगा, और इसके विपरीत। प्रकार के रूपांतरण प्रकार पदानुक्रम या डेटा अभ्यावेदन की कुछ विशेषताओं का लाभ उठा सकते हैं। एक प्रकार के रूपांतरण के दो महत्वपूर्ण पहलू हैं कि क्या यह स्पष्ट रूप से (स्वचालित रूप से) या स्पष्ट रूप से होता है, और क्या अंतर्निहित डेटा प्रतिनिधित्व को एक प्रतिनिधित्व से दूसरे में परिवर्तित किया जाता है, या किसी दिए गए प्रतिनिधित्व की केवल पुनर्व्याख्या की जाती हैअन्य डेटा प्रकार के प्रतिनिधित्व के रूप में। सामान्य तौर पर, आदिम और यौगिक डेटा प्रकार दोनों को परिवर्तित किया जा सकता है।
प्रत्येक प्रोग्रामिंग भाषा के अपने नियम होते हैं कि कैसे प्रकारों को परिवर्तित किया जा सकता है। मजबूत टाइपिंग वाली भाषाएं आमतौर पर बहुत कम निहित रूपांतरण करती हैं और अभ्यावेदन की पुनर्व्याख्या को हतोत्साहित करती हैं, जबकि कमजोर टाइपिंग वाली भाषाएं डेटा प्रकारों के बीच कई अंतर्निहित रूपांतरण करती हैं। कमजोर टाइपिंग लैंग्वेज अक्सर कंपाइलर को अलग-अलग प्रतिनिधित्व वाले डेटा आइटम की मनमाने ढंग से व्याख्या करने के लिए मजबूर करती है - यह एक गैर-स्पष्ट प्रोग्रामिंग त्रुटि हो सकती है, या अंतर्निहित हार्डवेयर से सीधे निपटने के लिए एक तकनीकी विधि हो सकती है।
जावा विभिन्न डेटा प्रकार प्रदान करता है, जैसे कि बूलियन, चार, इंट, अहस्ताक्षरित इंट, हस्ताक्षरित इंट, फ्लोट, डबल, लॉन्ग, इत्यादि जैसी कोई अन्य गतिशील भाषाएं कुल 7 प्रकार प्रदान करती हैं, जहां प्रत्येक डेटाटाइप मेमोरी में स्टोर करते समय अलग-अलग स्थान प्राप्त करता है।
प्रकार रूपांतरण
यदि आपके पास पिछला प्रोग्रामिंग अनुभव है, तो आप पहले से ही जानते हैं कि एक प्रकार के मान को दूसरे प्रकार के चर के लिए निर्दिष्ट करना काफी सामान्य है यदि दो प्रकार संगत हैं, तो जावा स्वचालित रूप से रूपांतरण (प्रकार रूपांतरण) करेगा। उदाहरण के लिए, एक लंबे चर के लिए एक अंतर मान निर्दिष्ट करना हमेशा संभव होता है। हालांकि, सभी प्रकार संगत नहीं हैं, और इस प्रकार, सभी प्रकार के रूपांतरणों की पूरी तरह से अनुमति नहीं है। उदाहरण के लिए, डबल से बाइट में परिभाषित कोई स्वचालित रूपांतरण नहीं है । सौभाग्य से, असंगत प्रकारों के बीच रूपांतरण प्राप्त करना अभी भी संभव है। ऐसा करने के लिए, आपको एक कास्ट का उपयोग करना चाहिए, जो एक स्पष्ट प्रदर्शन करता हैअसंगत प्रकारों के बीच रूपांतरण। आइए स्वचालित या व्यापक प्रकार के रूपांतरण ( प्रकार ज़बरदस्ती, प्रकार बाजीगरी ) और संकुचन या स्पष्ट रूपांतरण ( प्रकार कास्टिंग ) दोनों को देखें ।
जैसा कि आप देख सकते हैं, एक संख्यात्मक मान के साथ-साथ एक चर पर कास्ट करना संभव है। ध्यान दें कि आप अतिश्योक्तिपूर्ण कास्ट पेश कर सकते हैं; उदाहरण के लिए, जब आवश्यक हो तो संकलक स्वचालित रूप से एक int मान को लंबे समय तक बढ़ावा देगा। हालाँकि, आपको एक बिंदु बनाने या अपने कोड को स्पष्ट करने के लिए अतिश्योक्तिपूर्ण कास्ट का उपयोग करने की अनुमति है। अन्य परिस्थितियों में, कोड को संकलित करने के लिए केवल एक कलाकार आवश्यक हो सकता है।
सी और सी ++ में, टाइप रूपांतरण कुछ सिरदर्द पैदा कर सकता है। जावा में, रूपांतरण सुरक्षित है, इस अपवाद के साथ कि जब आप एक तथाकथित संकीर्ण रूपांतरण करते हैं (अर्थात, जब आप एक डेटा प्रकार से जाते हैं जो अधिक जानकारी रख सकता है जो अधिक जानकारी नहीं रखता है), तो आप चलाते हैं जानकारी खोने का जोखिम। यहां कंपाइलर आपको एक कास्ट (टाइप कास्टिंग) का उपयोग करने के लिए मजबूर करता है, वास्तव में यह कहते हुए, "यह एक खतरनाक काम हो सकता है - यदि आप चाहते हैं कि मैं इसे वैसे भी करूं तो आपको रूपांतरण को स्पष्ट करना होगा।” एक व्यापक रूपांतरण के साथ एक कास्ट (स्पष्ट कास्ट) की आवश्यकता नहीं है, क्योंकि नए प्रकार पुराने प्रकार से जानकारी को अधिक से अधिक रखेंगे ताकि कोई जानकारी कभी खो न जाए। जावा आपको बूलियन को छोड़कर किसी भी आदिम प्रकार को किसी अन्य आदिम प्रकार में बदलने की अनुमति देता है, जो किसी भी कास्टिंग की अनुमति नहीं देता है। वर्ग प्रकार कास्टिंग की अनुमति नहीं देते हैं। एक को दूसरे में बदलने के लिए विशेष विधियाँ होनी चाहिए। (...)
निहित प्रकार रूपांतरण
इसे 'स्वचालित या वेडनिनीग प्रकार रूपांतरण' के रूप में भी जाना जाता है।
- उपयोगकर्ता द्वारा किसी बाहरी ट्रिगर के बिना, कंपाइलर द्वारा स्वयं किया गया।
- आम तौर पर तब होता है जब एक अभिव्यक्ति में एक से अधिक डेटा प्रकार मौजूद होते हैं। ऐसी स्थिति में डेटा खोने से बचने के लिए टाइप कन्वर्जन (टाइप प्रमोशन) होता है।
- चर के सभी डेटा प्रकारों को सबसे बड़े डेटा प्रकार वाले चर के डेटा प्रकार में अपग्रेड किया जाता है।
bool -> char -> short int -> int ->
unsigned int -> long -> unsigned ->
long long -> float -> double -> long double
जानकारी खोने के लिए निहित रूपांतरणों के लिए यह संभव है, संकेत खो सकते हैं (जब हस्ताक्षर किए गए अहस्ताक्षरित रूप से परिवर्तित हो जाते हैं), और अतिप्रवाह हो सकता है (जब लंबे समय तक स्पष्ट रूप से फ्लोट में परिवर्तित हो जाता है)।
कभी-कभी हम इस प्रकार के रूपांतरण को प्रकार ceorcion के रूप में संदर्भित करते हैं।
जावा में, एक प्रकार की वस्तु को समान सामग्री के साथ एक अलग प्रकार की वस्तु में परिवर्तित करने के तंत्र को ज़बरदस्ती के रूप में जाना जाता है। दूसरे शब्दों में, हम कह सकते हैं कि ज़बरदस्ती एक डेटा प्रकार को दूसरे डेटा प्रकार में बदलने की प्रक्रिया है। अधिक विशिष्ट तरीके से, अंतर्निहित रूपांतरण को ज़बरदस्ती कहा जाता है । इसे टाइप जबरदस्ती के रूप में भी जाना जाता है ।
टाइप ceorcion में , कंपाइलर समय पर एक डेटा प्रकार स्वचालित रूप से दूसरे डेटा प्रकार में एक कंपाइलर द्वारा परिवर्तित हो जाता है। प्रकार ceorcion में , गंतव्य डेटा प्रकार स्रोत डेटा प्रकार से छोटा नहीं हो सकता है, इसलिए इसे व्यापक रूपांतरण भी कहा जाता है। एक और महत्वपूर्ण बात यह है कि इसे केवल संगत डेटा प्रकारों पर ही लागू किया जा सकता है।
Ceorcion उदाहरण टाइप करें -
int x=30;
float y;
y=x; // y==30.000000.
जावा स्वचालित रूप से ठोस या धराशायी तीरों की दिशा में डेटा को मजबूर कर देगा। उदाहरण के लिए:
बिंदीदार तीर को पार करने वाले दबावों की अनुमति है लेकिन इसके परिणामस्वरूप परिशुद्धता का नुकसान हो सकता है। इसका अर्थ है कि परिवर्तित मान प्रारंभिक मान के बराबर नहीं हो सकता है। उदाहरण के लिए:
यदि कोई कथन तीरों की दिशा के विरुद्ध डेटा को बाध्य करने का प्रयास करता है तो संकलक एक त्रुटि उत्पन्न करता है।
आइए जावा में निहित प्रकार की कास्टिंग का एक उदाहरण देखें।
यहां, हम एक साधारण असाइनमेंट ऑपरेटर का उपयोग करके एक इंट वैल्यू को एक लॉन्ग वैल्यू और अंत में एक डबल वैल्यू में बदल देंगे:
public class Main {
public static void main(String[] args) {
int a = 20;
long b = a; //implicit casting from int to long data type
double c = b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
} // implicit casting from long to double data type
20
20
20.0
दूसरे शब्दों में, "प्रकार रूपांतरण" एक प्रकार को बदलने की सामान्य प्रक्रिया को संदर्भित करता है, जबकि प्रकार की जबरदस्ती विशेष रूप से एक प्रकार के अंतर्निहित रूपांतरण को संदर्भित करती है। हम आगे प्रकार के दबाव को दो प्रकारों में उप-विभाजित कर सकते हैं - प्रोग्रामर नियंत्रित, और संकलक नियंत्रित (कभी-कभी करतब दिखाने के रूप में संदर्भित )।
स्पष्ट प्रकार रूपांतरण
यद्यपि स्वचालित प्रकार के रूपांतरण सहायक होते हैं, वे सभी आवश्यकताओं को पूरा नहीं करेंगे। उदाहरण के लिए, यदि आप एक बाइट चर के लिए एक अंतर मान निर्दिष्ट करना चाहते हैं तो क्या होगा? यह रूपांतरण स्वचालित रूप से नहीं किया जाएगा, क्योंकि एक बाइट एक int से छोटा होता है। इस तरह के रूपांतरण को कभी-कभी टाइप कास्टिंग कहा जाता है और यह उपयोगकर्ता परिभाषित होता है।
इस प्रक्रिया को संकुचित प्रकार का रूपांतरण भी कहा जाता है, क्योंकि आप स्पष्ट रूप से मूल्य को संकुचित कर रहे हैं ताकि यह लक्ष्य प्रकार में फिट हो सके।
दो असंगत प्रकारों के बीच रूपांतरण बनाने के लिए, आपको एक प्रकार की कास्टिंग का उपयोग करना चाहिए। एक कास्ट केवल एक स्पष्ट प्रकार का रूपांतरण है।
जावा में, यह कास्ट ऑपरेटर () का उपयोग करके किया जा सकता है :
यह कोष्ठक में अभिव्यक्ति के सामने आवश्यक प्रकार को स्पष्ट रूप से परिभाषित करके किया जाता है।
इसका यह सामान्य रूप है:
(target-type) expression
यहां, लक्ष्य-प्रकार निर्दिष्ट मान को कनवर्ट करने के लिए वांछित प्रकार निर्दिष्ट करता है। उदाहरण के लिए, निम्न खंड एक int को एक बाइट में डालता है । यदि पूर्णांक का मान एक बाइट की सीमा से बड़ा है , तो यह बाइट की सीमा से मापांक (पूर्णांक विभाजन का शेष) कम हो जाएगा।
int a;
byte b; // …
b = (byte) a;
निम्नलिखित प्रोग्राम कुछ प्रकार के रूपांतरणों को प्रदर्शित करता है जिनके लिए कास्ट की आवश्यकता होती है:
// Demonstrate casts.
class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte.");
b = (byte) i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int.");
i = (int) d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte.");
b = (byte) d;
System.out.println("d and b " + d + " " + b);
}
}
Conversion of int to byte. i and b 257 1
Conversion of double to int. d and i 323.142 323
Conversion of double to byte. d and b 323.142 67
आइए जावा में स्पष्ट कास्टिंग का एक उदाहरण देखें:
public class Main {
public static void main(String args[]) {
double d = 57.17;
int i = (int)d; // Explicit casting from long to int data type
System.out.println(d);
System.out.println(i); //fractional part lost
}
}
57.17
57
57
भावों में स्वचालित प्रकार का प्रचार
टाइप प्रमोशन जावा प्रोग्रामिंग में एक सामान्य घटना है, जिसे ऑटोटाइप प्रमोशन के उपयोग के माध्यम से आदिम डेटा प्रकारों के साथ स्वचालित रूप से प्राप्त किया जा सकता है। इसे स्वचालित डेटा प्रकार प्रचार के रूप में भी जाना जाता है।
जैसा कि आप जानते हैं कि असाइनमेंट के अलावा, एक और जगह है जहां कुछ प्रकार के रूपांतरण हो सकते हैं: भावों में।
नीचे संभावित प्रकार के प्रचारों का आरेखीय उदाहरण दिया गया है:
आपको पता चलेगा कि यदि आप आदिम डेटा प्रकारों पर कोई गणितीय या बिटवाइज़ ऑपरेशन करते हैं जो एक इंट (यानी, चार, बाइट, या शॉर्ट) से छोटे हैं, तो उन मानों को ऑपरेशंस करने से पहले इंट में प्रमोट किया जाएगा, और परिणामी मान int प्रकार का होगा। इसलिए यदि आप छोटे प्रकार में वापस असाइन करना चाहते हैं, तो आपको कास्ट का उपयोग करना होगा। (और, चूंकि आप एक छोटे प्रकार में वापस असाइन कर रहे हैं, आप जानकारी खो सकते हैं।) सामान्य तौर पर, अभिव्यक्ति में सबसे बड़ा डेटा प्रकार वह होता है जो उस अभिव्यक्ति के परिणाम का आकार निर्धारित करता है; यदि आप एक फ्लोट और एक डबल गुणा करते हैं, तो परिणाम दोगुना होगा; यदि आप एक इंट और एक लंबा जोड़ते हैं, तो परिणाम लंबा होगा।
अधिक समझने के लिए:
निम्न पर विचार करें। एक अभिव्यक्ति में, मध्यवर्ती मान के लिए आवश्यक सटीकता कभी-कभी ऑपरेंड की सीमा से अधिक हो जाती है। उदाहरण के लिए, निम्नलिखित अभिव्यक्ति की जाँच करें:
byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;
स्वचालित प्रचार जितने उपयोगी हैं, वे भ्रमित करने वाले संकलन-समय की त्रुटियां पैदा कर सकते हैं। उदाहरण के लिए, यह प्रतीत होता है कि सही कोड एक समस्या का कारण बनता है:
byte b = 50;
b = b * 2; // Error! Cannot assign an int to a byte!
ऐसे मामलों में जहां आप अतिप्रवाह के परिणामों को समझते हैं, आपको एक स्पष्ट कास्ट का उपयोग करना चाहिए, जैसे
byte b = 50;
b = (byte)(b * 2);
स्वचालित प्रकार के प्रचार के नियम
सही परिणाम प्राप्त करने के लिए जावा में एक्सप्रेशन निष्पादित करते समय टाइप प्रमोशन के लिए निम्नलिखित नियमों का पालन किया जाना चाहिए:
- बाइट , शॉर्ट , और चार प्रकार के सभी वेरिएबल्स को int में ऑटो टाइप प्रमोट किया जाना चाहिए ।
- यदि किसी संक्रिया में भाग लेने वाला कोई चर लंबा है , तो संक्रिया का परिणाम लंबा होना चाहिए ।
- यदि किसी ऑपरेशन में भाग लेने वाला कोई वैरिएबल फ्लोट है , तो ऑपरेशन का परिणाम फ्लोट होना चाहिए ।
आइए जावा में न्यूमेरिक प्रमोशन रूल्स को दर्शाने वाले कुछ जावा उदाहरण देखें-
1- जब एक ऑपरेंड डबल होता है।
public class PromotionExample {
public static void main(String[] args) {
int i = 30;
double d = 2.5;
double result = i * d;
System.out.println("Result is- " + result);
}
}
// output :
// Result is- 75.0
2- जब एक ऑपरेंड फ्लोट होता है।
public class PromotionExample {
public static void main(String[] args) {
short s = 4;
int i = 30;
float f = 6.75f;
float result = (s+i) * f;
System.out.println("Result is- " + result);
}
}
//output
// Result is- 229.5
3- ऑपरेंड में से एक फ्लोट होने पर परिणाम int को असाइन करने का प्रयास कर रहा है।
public class PromotionExample {
public static void main(String[] args) {
byte a= 100;
byte b= 50;
int i= 80;
float f = 80;
result = f/i *b; // line 6
}
}
error line 6
आइए Type Casting और Type Coercion के बीच अंतर देखें जो नीचे दिए गए हैं:
- टाइप कास्टिंग में, एक डेटा प्रकार को एक प्रोग्रामर द्वारा कास्टिंग ऑपरेटर का उपयोग करके दूसरे डेटा प्रकार में परिवर्तित किया जाता है। जबकि टाइप कोर्सियन में, एक डेटा टाइप को एक कंपाइलर द्वारा दूसरे डेटा टाइप में बदल दिया जाता है।
- टाइप कास्टिंग को संगत डेटा प्रकारों के साथ-साथ असंगत डेटा प्रकारों पर भी लागू किया जा सकता है । जबकि प्रकार का दबाव केवल संगत डेटा प्रकारों पर लागू किया जा सकता है ।
- टाइप कास्टिंग में, डेटा प्रकार को दूसरे डेटा प्रकार में कास्ट करने के लिए कास्टिंग ऑपरेटर की आवश्यकता होती है। जबकि टाइप जबरदस्ती में, कास्टिंग ऑपरेटर की कोई आवश्यकता नहीं होती है।
- टाइप कास्टिंग ( स्पष्ट प्रकार रूपांतरण) में , डेटा प्रकार को किसी अन्य डेटा प्रकार में परिवर्तित करते समय, गंतव्य डेटा प्रकार स्रोत डेटा प्रकार से छोटा हो सकता है। जबकि प्रकार के दबाव ( अपूर्ण प्रकार रूपांतरण) में, गंतव्य डेटा प्रकार नहीं हो सकता स्रोत डेटा प्रकार से छोटा।
- प्रोग्रामर द्वारा प्रोग्राम डिजाइन के दौरान टाइप कास्टिंग होती है। जबकि कंपाइल टाइम पर टाइप कन्वर्जन ( इम्प्लीकेट टाइप कन्वर्जन) किया जाता है।
- टाइप कास्टिंग को संकरा रूपांतरण भी कहा जाता है क्योंकि इसमें गंतव्य डेटा प्रकार स्रोत डेटा प्रकार से छोटा हो सकता है। जबकि प्रकार के दबाव ( अपूर्ण प्रकार रूपांतरण) को व्यापक रूपांतरण भी कहा जाता है क्योंकि इसमें गंतव्य डेटा प्रकार से छोटा नहीं हो सकता है। स्रोत डेटा प्रकार।
- टाइप कास्टिंग का उपयोग अक्सर कोडिंग और प्रतिस्पर्धी प्रोग्रामिंग कार्यों में किया जाता है। जबकि कोडिंग और प्रतिस्पर्धी प्रोग्रामिंग में टाइप ज़बरदस्ती ( अपूर्ण प्रकार रूपांतरण) का कम उपयोग किया जाता है क्योंकि इससे गलत उत्तर हो सकता है।
- टाइप कास्टिंग अधिक कुशल और विश्वसनीय है। जबकि टाइप ज़बरदस्ती ( अपूर्ण प्रकार का रूपांतरण) कम कुशल और कम विश्वसनीय है।
इसे फॉलो करके हमारे प्रकाशन का समर्थन करें
निम्नलिखित लेख भी देखें।
क्लिक जैकिंग और इसके निवारक उपायों को देखने के लिए 2023 रिएक्ट जेएस ट्रेंड स्प्रिंगबूट पार्ट के साथ स्प्लंक इंटीग्रेशन - 1 कोडिंग: जांचें कि जावास्क्रिप्ट में दो स्ट्रिंग्स एनाग्राम हैं या नहीं जावा ग्रह पर सबसे पसंदीदा प्रोग्रामिंग भाषा क्यों है जावा 5 सामान्य जावास्क्रिप्ट प्रश्न: स्पार्क आर्किटेक्चर का परिचय 25. सबसे बड़ा बाइनरी सर्च सबट्री (बीएसटी)
![क्या एक लिंक्ड सूची है, वैसे भी? [भाग 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































