Type Casting in Java – Automatic
Type Casting in Java: जावा का Compiler इस नियम पर काम करता है कि तभी दो Operands के बीच किसी प्रकार की Calculation हो सकती है, जब दोनों Operands समान Data Type के हों। विभिन्न प्रकार के Binary Operators दो Operands पर प्रक्रिया करते हैं और परिणाम Generate करते हैं। यदि Binary Operator के दोनों ओर समान Data Type के Variables ना हों, तो Compiler स्वयं ही Lower Data Type के Variable के मान को दूसरे Operand के अनुसार Higher Data Type के मान में Convert करता है। इस तरह की Type Casting को Automatic Type Casting कहते हैं। उदाहरण के लिए पिछले Program के निम्न Statement को देखिए-
distance = lightSpeed * seconds; //Total Distance
हम देख सकते हैं कि lightSpeed Variable Integer प्रकार का Variable है जबकि seconds long प्रकार का Variable है। यहां Integer प्रकार के Variable के मान का गुणा long प्रकार के Variable के मान से हो रहा है और परिणाम long प्रकार के Variable distance को Assign हो रहा है। इसे Automatic Type Casting कहते हैं, क्योंकि इसमें Compiler स्वयं ही Integer प्रकार के Variable lightSpeed के मान को long प्रकार के मान में Convert करने के बाद दूसरे long प्रकार के Variable seconds के मान से गुणा करता है और परिणाम को long प्रकार के Variable में Store करता है।
यदि distance जो कि long प्रकार का Variable है, float प्रकार का होता, तो Calculation से प्राप्त होने वाला परिणाम float प्रकार का Return होता और distance में Float प्रकार का मान Store होता और यदि distance double प्रकार का Variable होता तो प्राप्त Resultant मान double प्रकार में Store होता।
चूंकि इस Statement में Integer से long में यानी Lower Data Type के मान को Higher Data Type के मान में Convert करना है, इसलिए ये काम Compiler Automatically कर लेता है। लेकिन जब किसी Higher Data Type के मान को Lower Data Type के मान में Convert करके Calculation करवानी होती है, तब हम Automatic Type Casting का प्रयोग नहीं कर सकते है।
ऐसा करने पर परिणाम गलत प्राप्त होता है। इस स्थिति में हमें Manual Type Casting करनी पडती है। यदि हम चाहें कि इसी Statement में lightSpeed का मान Long Data Type में Convert होने के बजाय, seconds का मान Integer प्रकार में Convert हो और उसके बाद दोनों Variables के मानों का गुणा हो, तो हमें इसी Statement को निम्नानुसार लिखना पडेगा-
distance = lightSpeed * (int) seconds; //Total Distance
हम देख सकते हैं कि seconds Variable के पहले एक कोष्ठक में हमने int Keyword का प्रयोग किया है। ये Keyword seconds के मान को Integer प्रकार के मान में Convert कर देता है। चूंकि कोष्ठक की Priority सभी Operators व विभिन्न Language Symbols से ज्यादा होती है, इसलिए सबसे पहले seconds का मान long से int में Convert होता है। उसके बाद lightSpeed व seconds के मानों का गुणा होता है, जिसका परिणाम हमें Integer प्रकार के मान के रूप में प्राप्त होता है। ये मान distance नाम के Variable में Store हो जाता है। जहां तक हो सके हमें Higher Type से Lower Type में Data के मान को Convert नहीं करना चाहिए। ऐसा करने पर Data का Loss हो जाता है।
जैसे यदि हम किसी Integer प्रकार के मान 1234 को char प्रकार के या byte प्रकार के मान में Convert करेंगे, तो Data का Loss हो जाएगा। क्योंकि byte प्रकार का Variable अधिकतम 256 तक का मान ही Store कर सकता है। यदि इससे अधिक मान को इस प्रकार के Variable में Store किया जाता है, तो प्राप्त होने वाला परिणाम अपूर्ण या गलत हो जाता है। (Type Casting in Java – Wiki)
Type Casting in Java – Manual
Manual Type Casting को समझने के लिए एक Example Program देखते हैं।
//Program public class ManualTypeCasting { public static void main(String args[]) { byte b; int i = 257; double d = 345.678; System.out.println("\n Conversion of int to byte. "); b = (byte) i; System.out.println("i and b " + i + " " + b); System.out.println("\n Conversion of double to int. "); i = (int) d; System.out.println("d and i " + d + " " + i); System.out.println("\n Conversion of double to byte. "); b = (byte) d; System.out.println("d and b " + d + " " + b); } }
जब Integer प्रकार के मान 257 को byte प्रकार में Convert किया जाता है, तब हमें byte प्रकार के Variable का मान 1 प्राप्त होता है। ऐसा इसलिए होता है क्योंकि Byte प्रकार के Variable में केवल 256 तक का ही मान Store हो सकता है और 256 तक का मान Store करने के लिए केवल 8-Bits की जरूरत होती है। जबकि 257 मान को Store करने के लिए हमें कम से कम 9-Bits की जरूरत होती है और 257 की Binary 100000001 होती है। अब चूंकि Byte प्रकार के Variable में केवल 8 Bits ही Store हो सकते हैं, इसलिए Byte प्रकार के Variable में 00000001 Bits ही Stored हो पाते हैं 9 वें स्थान का Bit Lost हो जाता है। इस स्थिति में ये Bits मान 1 को Represent करते हैं।
जब double प्रकार के मान को int प्रकार के मान में Convert किया जाता है, तब चूंकि int प्रकार का Variable दसमलव के बाद के मान को Store नहीं कर सकता है, इसलिए जब double प्रकार के मान को int प्रकार में Convert किया जाता है, तब double प्रकार के मान 345.678 के दसमलव वाले भाग को Compiler द्वारा छोड दिया जाता है और int प्रकार के Variable में केवल 345 ही Store हो पाता है।
जब double प्रकार के मान को byte प्रकार के Variable में Store करने के लिए Convert किया जाता है, तब double प्रकार के Variable के दसमलव वाला हिस्सा Compiler द्वारा छोड दिया जाता है। फिर चूंकि byte प्रकार का Variable केवल 256 तक के मान को ही Store कर सकता है, इसलिए double प्रकार के मान 345 में से 256 Less हो जाता है और 89 बचता है। ये 89 मान byte प्रकार के Variable में Store हो जाता है।
जावा Type Checking के मामले में बहुत ही Strict है। हम किसी byte प्रकार के Variable में int प्रकार के मान को Store करना चाहते हैं, तो जावा हमें ऐसा नहीं करने देता है। यदि हमें byte प्रकार के Variable मे int प्रकार के Variable का मान Assign करना हो, तो हमें int प्रकार के Variable की Type Casting करनी ही पडती है। जैसे:
int i; byte b; b = (int) i;
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF