2012-05-14 25 views
6

सवाल यह है:जावा ऑपरेटरों दिलचस्प मुद्दा

इस मामले में मुझे जावा में संकलन त्रुटि क्यों मिलती है?

byte x = 0; 
x = 128; 

लेकिन यह कानूनी है:

x+= 999l; 

मैं ग्रहण का उपयोग करें, JDK 7.

धन्यवाद

+0

आप वास्तव में क्या पूछने की कोशिश कर रहे हैं, संबंधित कोड ब्लॉक में एक चर एक्स होने के अलावा कुछ भी सामान्य नहीं है? – sjakubowski

+1

उसका मतलब है कि एक्स दूसरे मामले में बाइट भी है –

उत्तर

2

की वैध सीमा में है में अपने पहले एक:

byte x = 0; 
x = 128; 

ए बाइट एक हस्ताक्षरित अभिन्न प्रकार है, 8-बिट चौड़ा है, और -128 से +127 की सीमा व्यक्त कर सकता है।

x = 128 "निर्दिष्ट 128 को x" का अर्थ है, और डिफ़ॉल्ट रूप से, 128 प्रकार int की है, इसलिए क्योंकि intbyte की तुलना में व्यापक है आप एक intbyte हैं जो Possible loss of precision त्रुटि पैदा करने के लिए आवंटित करने के लिए कोशिश कर रहे हैं। इसे काम करने के लिए, आपको स्पष्ट रूप से 128 का मान डालना होगा।

byte x = 0; 
x = (byte)128; // x is now -128. 

अपने दूसरे उदाहरण के लिए, x को मानों को जोड़ने ठीक है, लेकिन तुम सिर्फ मूल्यों अतिप्रवाह।

byte x = 0; 
x += 999L; // don't really need the long qualifier here 
// x is now -25. 
4

byte पर हस्ताक्षर किए है और केवल 127 और एक की एक अधिकतम मान हो सकता है -128 का न्यूनतम मान, यही कारण है कि पहला मामला आपको संकलन त्रुटि देता है।

दूसरे मामले संकलित क्योंकि और मूल्य आप एक 'बाइट' में जोड़ने के इर्द-गिर्द घूमती, सूचना है कि 999 % 128 = 103 है, जो एक 'बाइट'

+0

इससे कोई फर्क नहीं पड़ता कि उसने जो नंबर जोड़ा, अतिरिक्त संकलन कभी विफल नहीं होगा; यह केवल ओवरफ्लो होगा - एक ऑफ-ऑफ-रेंज संकलन-समय निरंतर असाइन करने का प्रयास करने के विरोध में। –

+0

@ मार्कोटोपोलनिक सच, धन्यवाद –

+0

यह दिलचस्प है, लेकिन क्यों? कंपाइलर में यह देख सकता है कि यह अतिप्रवाह है और इसे रोक सकता है लेकिन यह ऐसा नहीं करता है .. –

0

इस पहले बयान x = 128 में, के बाद से बाइट रेंज जावा में 0-127 है यह एक स्पष्ट डाली और इसलिए संकलन त्रुटि की आवश्यकता है। दूसरे मामले में यह बहती है और -25 में परिवर्तित हो जाती है जो बाइट रेंज में है।

1

बाइट की श्रेणी -128 से 127 है। यह x + = 999l; काम करता है क्योंकि यह यौगिक असाइनमेंट ऑपरेटर है। यहां देखें possible same or alike question

संबंधित मुद्दे