java - जावा अजीब असाइनमेंट नियम



char integer (1)

तो, रेखा:

Short s = 'a'; // is valid ...

चूंकि चार्इंसियंस 16-बिट मान (अधिकतम मूल्य 65,536 है) और लघु पर 16-बिट मान (अधिकतम मूल्य 32,767) पर हस्ताक्षर किए गए हैं, इसलिए एक संकुचित आदिम रूपांतरण (चार से छोटा) एक मुक्केबाजी रूपांतरण के बाद है )।

short s = 'a'; // also valid: narrowing primitive conversion (char -> short)

ये विशेष मामलों हैं :

इसके अतिरिक्त, यदि अभिव्यक्ति एक प्रकार की बाइट , लघु , चार , या अंतर की अभिव्यक्ति है:

  • एक संकुचित आदिम रूपांतरण का उपयोग किया जा सकता है, यदि चर का प्रकार बाइट , लघु , या वर्ण होता है , और निरंतर अभिव्यक्ति का मान चर के प्रकार में प्रतिनिधित्व करता है।

मुम्बई रूपांतरण के बाद एक संकुचित आदिम रूपांतरण का उपयोग किया जा सकता है, यदि चर का प्रकार है:

  • बाइट और निरंतर अभिव्यक्ति का मान प्रकार बाइट में प्रतिनिधित्व योग्य है।

  • लघु और स्थिर अभिव्यक्ति का मूल्य संक्षिप्त प्रकार में प्रतिनिधित्व योग्य है।

  • अक्षर और निरंतर अभिव्यक्ति का मूल्य वर्ण प्रकार में प्रतिनिधित्व योग्य है।

चलिए अगले उदाहरणों पर जाते हैं:

Integer ii = 'a'; // is invalid: not a special case according to Oracle docs
int i = 'a';      // is valid: widening primitive conversion (char -> int) is allowed

लाइन b = L अमान्य क्यों है? क्योंकि यह ऊपर वर्णित एक विशेष मामला नहीं है और हम जानकारी खो सकते हैं (बी बाइट है , जबकि एल लंबा है ), यही कारण है कि आपको एक स्पष्ट कलाकार करना होगा:

b = (byte) L; // narrowing primitive conversion (long -> byte)

साथ ही, एक बहुत ही उपयोगी तालिका पर एक नज़र डालें

जेएलएस दस्तावेज़ीकरण में इन सभी नियमों के बारे में बहुत सारी जानकारी हैं और आपको उनके बारे में चिंता करने की आवश्यकता नहीं है। आपके अंतिम प्रश्न के बारे में मैं क्या कह सकता हूं कि एक निहित संकुचन रूपांतरण के बिना किसी भी पूर्णांक के लिए अगले मामलों में एक कलाकार की आवश्यकता होगी:

// Cast is permitted but not required
byte  b = (byte)  100;
short s = (short) 200;

लेकिन कोड की निम्न पंक्तिएं अधिक संक्षिप्त दिखाई देती हैं:

byte  b = 100;
short s = 200;
short s = 'a';       // valid
Short ss = 'a';      // valid
int i = 'a';         // valid
Integer ii = 'a';    // invalid

क्यों पूर्णांक ii = 'a' अमान्य, लेकिन int i = 'a' मान्य है? क्यों लघु एसएस = 'ए' मान्य है, लेकिन पूर्णांक ii = 'a' अमान्य है?

एक और सेट प्रश्न:

byte b;
final short s = 1;
final Short ss = 1;
final int i =1;
final Integer ii = i;
final long L = 1;
final Long LL =1L;

b = s;     // valid
b = ss;    // invalid
b = i;     // valid
b = ii;    // invalid
b = L;     // invalid
b = LL;    // invalid  

क्यों बी = एल; अमान्य, जबकि बी = एस; मान्य है?

कृपया, यह मत कहो कि यह सब इसलिए है क्योंकि जेएलएस ने ऐसा कहा। मुझे यह जानना है कि जेएलएस में ये असंगत और गैर-सहज ज्ञान युक्त नियम हैं। मुझसे क्या छूट गया?





variable-assignment