दिलचस्प पोस्ट
क्यों स्टेटful और स्टेटलेस बीन्स विपरीत तरीके से व्यवहार करते हैं? सोप या वेब सेवाओं के लिए आराम? एंड्रॉइड – कोऑर्डिनेटर लेआउट में उपयोग किए जाने पर स्क्रीन पर पाद लेख स्क्रॉल किया जाता है एक रीसेट एपीआई में कई-से-कई रिश्तों को कैसे संभालना है? HQL में दिनांक / समय गणित प्रदर्शन करना? काम करने के लिए कार्यवाही में खोजदृश्य नहीं मिल सकता है Google नक्शे का उपयोग करते समय OVER_QUERY_LIMIT सीएसएस में सेलपैडिंग और सेलेक्शनिंग सेट करें? हास्केल की स्ट्रीम फ्यूजन क्या है मुझे ईएस 6 आयात के लिए कुरकुरा ब्रेसिज़ का उपयोग कब करना चाहिए? टेक्सरेआ में लाइनों की सीमा और jQuery का उपयोग करने वाली डिस्प्ले लाइन गिनती क्यों कोई std :: रक्षा नहीं है? नेटी बनाम अपाचे मिना क्यों नहीं आर के इलसेन स्टेटमेंट वैक्टर लौट सकते हैं? संकेतक सी में बदल जाता है तो कितना मेमोरी मुक्त हो जाएगी?

क्या जावा भाषा के नियमों के कारण या 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

Solutions Collecting From Web of "क्या जावा भाषा के नियमों के कारण या 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

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