दिलचस्प पोस्ट
क्या Xcode / Iphone सिम का उपयोग करने वाले कई आईफ़ोन्स को अनुकरण करने का एक तरीका है? डेटा के स्रोत के रूप में वैश्विक चर के साथ PHP सत्र साइड इफेक्ट चेतावनी स्ट्रिंग तुलना में उच्चारण किए गए अक्षरों को अनदेखा कर रहा है एंड्रॉइड लेआउट फ़ोल्डर्स: लेआउट, लेआउट-पोर्ट, लेआउट-लैंड फ़ोकस पर और क्लिक पर ListView आइटम का रंग कैसे परिवर्तित करें जावा में रनिंग कमांड लाइन JSON.stringify का उल्टा? निश्चित मूल्यों के साथ JPA में नक्शा enum? JPA में कॉलम के लिए डिफ़ॉल्ट मान सेट करना GMail PHP API के साथ ईमेल का मुख्य भाग नहीं मिल सकता है जावा में विशेष वर्णों से बचने के लिए यूआरएल कैसे एन्कोड करें उद्देश्य-सी क्लास में C फ़ंक्शन को मिलाकर करना PHP ऑब्जेक्ट बनाम एरेज़ एंड्रॉइड ऐप में ओपनसीवी प्रबंधक कैसे एकीकृत करें HTML में पीडीएफ एम्बेड करने का अनुशंसित तरीका?

क्या जावा भाषा के नियमों के कारण या jvm के कारण बाइट को आंतों में जोड़ा जाता है?

byte a = 1; byte b = 1; byte c = a + b; 

फेंकता त्रुटि: शुद्धता का संभावित नुकसान

 byte subt = a_s - a_b; ^ required: byte found: int 

क्या यह व्यवहार jvm के साथ कुछ करना है या इसकी जावा भाषा में परिभाषित किया गया है

संपादित करें: और अगर इसे जावा भाषा में परिभाषित किया गया है, तो क्या इसे jvm को ध्यान में रखते हुए करता है?

इसका मतलब है कि जावा byte डेटाटाइप का समर्थन करता है, तो क्यों operation on byte परिणाम int operation on byte

वेब के समाधान से एकत्रित समाधान "क्या जावा भाषा के नियमों के कारण या jvm के कारण बाइट को आंतों में जोड़ा जाता है?"

अगर जावा बाइट डेटाटाइप का समर्थन करता है तो बाइट परिणाम int पर ऑपरेशन क्यों

क्योंकि जावा वर्चुअल मशीन को डिज़ाइन किया गया है। कोई बाइट प्रकार पर ऑपरेशन करने के लिए कोई निर्देश सेट नहीं है। इसके बजाए int प्रकार के लिए निर्देश सेट boolean , byte , char और short प्रकारों पर ऑपरेशन के लिए उपयोग किया जाता है।

JVM युक्ति से – धारा 2.11.1 :

एक कंपाइलर जावा वर्चुअल मशीन निर्देशों का उपयोग करके टाइप byte के शाब्दिक मूल्यों के भार को short और संकलन-समय या रन-टाइम में उन मानों के मूल्यों को साइन-एक्स्प्ले करता है। प्रकारों के शाब्दिक मूल्यों के भार boolean और char ऐसे निर्देशों का उपयोग करके एन्कोड किया जाता है, जो कि संकलन-समय या रन-टाइम में टाइप- int की वैल्यू के लिए शून्य-विस्तारित होता है। [..]। इस प्रकार, वास्तविक प्रकार के boolean , byte , char , और short मूल्यों पर सबसे अधिक परिचालन कम्प्यूटेशनल प्रकार int मूल्यों पर चलने वाले निर्देशों द्वारा सही ढंग से किया जाता है

इसके पीछे कारण भी उस खंड में निर्दिष्ट है:

जावा आभासी मशीन के एक-बाइट ओपोड आकार को देखते हुए एपोडोड में एन्कोडिंग प्रकार अपने निर्देश सेट के डिजाइन पर दबाव डालते हैं। यदि प्रत्येक टाइप अनुदेश सभी जावा आभासी मशीन के रन-टाइम डेटा प्रकारों का समर्थन करता है, तो एक byte में प्रदर्शित किया जा सकता है उससे अधिक निर्देश होंगे। […] अलग-अलग निर्देशों का उपयोग असमर्थित और समर्थित डेटा प्रकारों के बीच आवश्यकतानुसार कन्वर्ट करने के लिए किया जा सकता है

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

यहां एक मेज है जो वास्तविक प्रकार के मानचित्रण को JVM कम्प्यूटेशनल प्रकार के लिए निर्दिष्ट करता है:

संकलक सही काम कर रहा है क्योंकि (a + b) अधिकतम मान से परे जा सकते हैं जिसे बाइट वेरिएबल में रखा जा सकता है। यदि आप कम्पाइलर ए, बी मानों को बताते हैं कि 'अंतिम' कीवर्ड का इस्तेमाल करते हुए इसे बदला नहीं जाता है, तो वह अब शिकायत नहीं करेगा।

 final byte a = 1; final byte b = 1; byte c = a + b; 

जेएलएस 5.6.2: बाइनरी संख्यात्मक संवर्धन इसे शामिल करता है:

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

  • यदि कोई ऑपरेंड double प्रकार का है, तो दूसरे को double बदल दिया जाएगा।

  • अन्यथा, यदि कोई ऑपरैंट प्रकार float , तो दूसरे को float कनवर्ट किया जाता है।

  • अन्यथा, यदि कोई ऑपरेंन्ड long प्रकार से होता है, तो दूसरे को long परिवर्तित किया जाता है।

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

हां, यह भाषा का विवरण है

इसके अलावा (+) ऑपरेटर जबकि जोड़ते हुए, 'a' को int प्रकार, बी के रूप में अच्छी तरह से टाइप करने के लिए int को बदलकर (निहित रूप से डाले जाते हैं) इसलिए result परिलक्षित होता है प्रकार int

ऑपरेटर के लिए भी यही है