java - बाइट्स पूर्णांक का योग क्यों है?



integer byte (1)

मेरे पास टाइपो बाइट चर है

byte a = 3;
byte b = 4;

अगर मैं उन्हें योग करता हूँ, योग का मान पूर्णांक है

byte z = a+b  //error, left side is byte, right side is integer

क्यों a + b int है?


क्योंकि जावा भाषा विशिष्टता ऐसा कहती है

बाइनरी संख्यात्मक पदोन्नति ऑपरेंड (§5.6.2) पर की जाती है।

ध्यान दें कि द्विआधारी संख्यात्मक पदोन्नति मान सेट रूपांतरण (§5.1.13) करता है और अनब्लॉकिंग रूपांतरण (§5.1.8) कर सकता है।

सांख्यिक परिपथों पर एक योजक अभिव्यक्ति का प्रकार प्रचारित प्रकार के ऑपरेंडों का है।

और, संख्यात्मक पदोन्नति के संबंध में ,

आदिम रूपांतरण को विस्तारित करना (§5.1.2) को या तो दोनों नियमों को परिवर्तित करने के लिए लागू किया गया है जैसा कि निम्नलिखित नियमों द्वारा निर्दिष्ट किया गया है:

  • [...]
  • अन्यथा, दोनों ऑपरेंड्स को टाइप करने के लिए int को बदल दिया जाता है।

इसलिए byte मान को int वैल्यू को बढ़ावा दिया जाता है और इसे जोड़ा जाता है। अभिव्यक्ति का परिणाम प्रचारित प्रकार है, इसलिए एक int

आप केवल परिणाम निकाल सकते हैं

byte z = (byte) (b + a);

लेकिन अतिप्रवाह / अंडरफ्लो के साथ सावधान रहना






byte