2014-10-08 12 views
8

जावा में char c = (char)65.8; क्यों अनुमति है?जावा में दो से चार को कास्ट करने की अनुमति क्यों दी जा रही है?

65.8 एक त्रुटि को फेंकना नहीं चाहिए क्योंकि यह सटीक यूनिकोड मान नहीं है? मैं समझता हूं कि डबल को एक पूर्णांक में छोटा कर दिया गया है, इस मामले में, 65, लेकिन यह प्रोग्रामर को ऐसी कलाकार बनाने की अनुमति देने के लिए मुझे खराब डिजाइन जैसा लगता है।

+0

शायद भाषा डिजाइनर नौसिखिया प्रोग्रामर द्वारा की गई गलतियों की उच्च संभावना की कीमत के साथ इसका उपयोग करने के मामले में सुविधाओं को लागू करते हैं। मैं सहमत हूं कि अगर यह परिदृश्य – gerrytan

+0

बीटीडब्ल्यू-जावा में कुछ प्रकार की कंपाइलर चेतावनियां दी जाती हैं तो यह अच्छा होगा, ASCII नहीं, यूनिकोड का उपयोग करता है। जावा का 'char' डेटाटाइप एक यूटीएफ -16 कोड-यूनिट स्टोर करता है, जिसमें से एक या दो यूनिकोड कोडपॉइंट एन्कोड करते हैं। एक बेस कोडपॉइंट और शून्य या अधिक कोडपॉइंट्स संयोजन एक ग्रैफेम बनाते हैं, जो लोग "चरित्र" शब्द का उपयोग करते समय सोचते हैं। –

उत्तर

10

इसे कहा जाता है संकीर्ण प्रकार कास्टिंगoracle docs से:

22 आदिम प्रकार पर विशिष्ट रूपांतरण को सीमित करने आदिम रूपांतरण कहा जाता है:

बाइट या चार के लिए कम

चार बाइट करने के लिए या बाइट के लिए कम

पूर्णांक, लघु, या चार

लंबे समय तक बाइट, लघु, चार, या int

बाइट, लघु, चार, पूर्णांक, या लंबी

बाइट, लघु, चार, पूर्णांक, लंबे समय के लिए डबल, या करने के लिए नाव नाव

एक संकुचन आदिम रूपांतरण के समग्र परिमाण के बारे में जानकारी खो सकते हैं एक संख्यात्मक मान और सटीकता और रेंज भी खो सकता है। और चौड़ा संकुचन:

जावा में, वहाँ प्रकार रूपांतरण के दो बुनियादी प्रकार हैं।

एक widening conversion तब होता है जब आप एक प्रकार बड़ा (या व्यापक) श्रृंखला के साथ साथ छोटे (या संकरा) टाइप करने के लिए से परिवर्तित करते हैं। इस वजह से, डेटा हानि के लिए कोई मौका नहीं है और रूपांतरण "सुरक्षित" माना जाता है।

एक narrowing conversion तब होता है जब आप एक प्रकार छोटे (या संकरा) श्रृंखला के साथ बड़ा (या व्यापक) टाइप करने के लिए साथ में कनवर्ट। जब से हम सीमा सिकुड़ रहे हैं, वहाँ डेटा नुकसान का एक मौका है, इसलिए इस रूपांतरण माना जाता है

narrowing type conversion

बाइट से रूपांतरणचार को "असुरक्षित" एक विशेष मामला है और का प्रतिनिधित्व करता है और को को एक ही समय में संकीर्ण करना।रूपांतरण एक पूर्णांक को बाइट परिवर्तित करने के लिए और फिर पूर्णांकचार में परिवर्तित हो जाता से शुरू होता है।

एक कारण मैं सोच सकता हूं कि टाइपिंग कास्टिंग को संकुचित करने के परिणामस्वरूप त्रुटि/अपवाद किसी मामले में हानि होने पर मामलों में सुविधाजनक/आसान/त्वरित प्रकार के रूपांतरण की अनुमति नहीं देता है। कंपाइलर यह सुनिश्चित करने के लिए हमें छोड़ देता है कि परिवर्तित डेटा छोटी सीमा में फिट हो सकेगा। यह भी उपयोगी है अगर हम double के मान को गोलाकार करने के लिए मूल्यों को जल्दी से छोटा करना चाहते हैं (इसे int पर टाइप-कास्टिंग करके)।

+0

चार चौड़े और संकीर्ण किनारों के लिए कहां जाएंगे? – Kootling

+1

'बाइट' और' शॉर्ट 'के बीच में। http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – nem035

+0

यह समझ में आता है, क्योंकि 'char' 16 बिट्स है। लेकिन फिर हमें 'बाइट' को 'char' में क्यों डालने की ज़रूरत है, भले ही यह एक चौड़ा रूपांतरण होना चाहिए? – Kootling

1

गूंगा कंप्यूटर कैसे जान सकता है कि क्या उद्देश्य था?

char c = (char)65.8; // valid, double gets converted and explicitly truncated to a char 

यह इतना हो सकता है कि एक गणना के दौरान, आप कुछ जटिल डबल गणित और अंतिम मूल्य पर अंत में शामिल संगणना कर किया जा सकता है, तो आप trucation और एक चरित्र के रूप में प्रदर्शित लागू होते हैं। क्या गलत है?

+0

यह पूछने के लिए एक बहुत ही वैध सवाल है कि क्यों यह गणना एक स्थिर विधि के लिए कॉल के बजाय एक प्रकार का कलाकार के रूप में व्यक्त की जाती है। –

4

यह असाइनमेंट पर स्वचालित रूप से नहीं होता है: यह एक संकलन त्रुटि होगी।

तथ्य यह है कि प्रोग्रामर एक सचेत विकल्प बनाता है (उदाहरण के लिए कास्ट कास्ट) का अर्थ है कि वह संभावित छंटनी की संभावना और जिम्मेदारी को ध्यान में रख रही है।

+0

क्या इसे चार से एक बार डालने के लिए बुरी आदत माना जाएगा? – Kootling

+1

यह असामान्य लगता है, लेकिन मुझे यकीन है कि वहां एक वैध उपयोग केस है। – Kevin

2

आपके पास सिफर एल्गोरिदम जैसे कोड हो सकते हैं जो double या float से char पर कास्ट करने में उपयोगी हो सकते हैं। इसके अलावा, char एक हस्ताक्षरित प्रकार है, जिसका अर्थ है (char)200.5(char)(byte)200.5 से कुछ अलग पैदा करता है।

संबंधित मुद्दे