java - "Int i=2147483647+1;" ठीक है, लेकिन "बाइट बी=127+1;" संकलित नहीं है?




byte (3)

@MByD के सबूत के रूप में:

निम्नलिखित कोड संकलित करता है:

byte c = (byte)(127 + 1);

चूंकि अभिव्यक्ति (127 + 1) byte प्रकार के दायरे से बाहर और परे है, परिणाम byte डाला byte है। यह अभिव्यक्ति -128 उत्पन्न करती है।

int i = 2147483647 + 1; क्यों है int i = 2147483647 + 1; ठीक है, लेकिन byte b = 127 + 1; संकलन योग्य नहीं है?


जेएलएस 3 # 5.2 असाइनमेंट रूपांतरण

(चर = अभिव्यक्ति)

इसके अलावा, अगर अभिव्यक्ति एक निरंतर अभिव्यक्ति (§15.28) प्रकार बाइट, लघु, चार या int है:

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

इस खंड के बिना, हम लिखने में सक्षम नहीं होंगे

byte x = 0;
char c = 0;

लेकिन क्या हमें ऐसा करने में सक्षम होना चाहिए? मुझे ऐसा नहीं लगता। Primitives के बीच रूपांतरण में कुछ जादू चल रहा है, एक बहुत सावधान रहना चाहिए। मैं लिखने के लिए अपने रास्ते से बाहर जाना होगा

byte x = (byte)0;

स्थिरांक का मूल्यांकन इन्ट्स के रूप में किया जाता है, इसलिए 2147483647 + 1 ओवरफ्लो और आपको एक नया int देता है, जो int को असाइन किया जा सकता है, जबकि 127 + 1 का मूल्यांकन 128 बराबर होता है, और यह byte को असाइन करने योग्य नहीं है।





int