सवाल यह है:जावा ऑपरेटरों दिलचस्प मुद्दा
इस मामले में मुझे जावा में संकलन त्रुटि क्यों मिलती है?
byte x = 0;
x = 128;
लेकिन यह कानूनी है:
x+= 999l;
मैं ग्रहण का उपयोग करें, JDK 7.
धन्यवाद
सवाल यह है:जावा ऑपरेटरों दिलचस्प मुद्दा
इस मामले में मुझे जावा में संकलन त्रुटि क्यों मिलती है?
byte x = 0;
x = 128;
लेकिन यह कानूनी है:
x+= 999l;
मैं ग्रहण का उपयोग करें, JDK 7.
धन्यवाद
की वैध सीमा में है में अपने पहले एक:
byte x = 0;
x = 128;
ए बाइट एक हस्ताक्षरित अभिन्न प्रकार है, 8-बिट चौड़ा है, और -128
से +127
की सीमा व्यक्त कर सकता है।
x = 128
"निर्दिष्ट 128
को x
" का अर्थ है, और डिफ़ॉल्ट रूप से, 128
प्रकार int
की है, इसलिए क्योंकि int
byte
की तुलना में व्यापक है आप एक int
byte
हैं जो 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.
byte
पर हस्ताक्षर किए है और केवल 127
और एक की एक अधिकतम मान हो सकता है -128
का न्यूनतम मान, यही कारण है कि पहला मामला आपको संकलन त्रुटि देता है।
दूसरे मामले संकलित क्योंकि और मूल्य आप एक 'बाइट' में जोड़ने के इर्द-गिर्द घूमती, सूचना है कि 999 % 128 = 103
है, जो एक 'बाइट'
इससे कोई फर्क नहीं पड़ता कि उसने जो नंबर जोड़ा, अतिरिक्त संकलन कभी विफल नहीं होगा; यह केवल ओवरफ्लो होगा - एक ऑफ-ऑफ-रेंज संकलन-समय निरंतर असाइन करने का प्रयास करने के विरोध में। –
@ मार्कोटोपोलनिक सच, धन्यवाद –
यह दिलचस्प है, लेकिन क्यों? कंपाइलर में यह देख सकता है कि यह अतिप्रवाह है और इसे रोक सकता है लेकिन यह ऐसा नहीं करता है .. –
इस पहले बयान x = 128
में, के बाद से बाइट रेंज जावा में 0-127
है यह एक स्पष्ट डाली और इसलिए संकलन त्रुटि की आवश्यकता है। दूसरे मामले में यह बहती है और -25 में परिवर्तित हो जाती है जो बाइट रेंज में है।
बाइट की श्रेणी -128 से 127 है। यह x + = 999l; काम करता है क्योंकि यह यौगिक असाइनमेंट ऑपरेटर है। यहां देखें possible same or alike question।
आप वास्तव में क्या पूछने की कोशिश कर रहे हैं, संबंधित कोड ब्लॉक में एक चर एक्स होने के अलावा कुछ भी सामान्य नहीं है? – sjakubowski
उसका मतलब है कि एक्स दूसरे मामले में बाइट भी है –