2015-03-03 13 views
7
int anInt = 1; 
double aDouble = 2.5; 

anInt = anInt + aDouble; // Error - need to cast double to int 

anInt += aDouble; // This is ok. Why? 

anInt = aDouble; // This is also an error. 

anInt = 1 + aDouble; // This is also an error. 

मेरे सवालों int करने के लिए एक डबल तो है: क्यों यह anInt += aDouble करने के लिए एक संकलन त्रुटि नहीं है?जावा गूढ़ - कास्टिंग

+1

क्या आप समझा सकते हैं कि आपको क्या चाहिए? – Gunaseelan

+0

@ गुनासेलन टिप्पणी में कोड में नहीं है? – RNJ

+1

@ गुनासेलन मुझे लगता है कि वह पूछ रहा है कि 'int = int + double' एक त्रुटि क्यों फेंकता है जबकि' int + = double' – SomeJavaGuy

उत्तर

8

चार में से तीन मामले ठीक से एक त्रुटि की रिपोर्ट करते हैं। कंपाउंड असाइनमेंट नियम से एकमात्र अपवाद है। जावा भाषा विशिष्टता, भाग 15.26.2, बताता है कि क्यों:

15.26.2 यौगिक असाइनमेंट ऑपरेटरों

रूप E1 op= E2 का एक यौगिक काम अभिव्यक्ति E1 = (T) ((E1) op (E2)), जहां TE1 के प्रकार है के बराबर है , सिवाय इसके कि E1 का मूल्यांकन केवल एक बार किया जाता है।

उदाहरण के लिए, निम्नलिखित कोड सही है:

short x = 3; 
x += 4.6; 

और एक्स में परिणाम मूल्य 7 होने क्योंकि यह के बराबर है:

short x = 3; 
x = (short)(x + 4.6); 

आप देख सकते हैं, त्रुटि एक कास्ट के निहित सम्मिलन से बचा जाता है।

+0

हां। मैं अपने कोड में इस पर आया और आश्चर्यचकित था कि यौगिक असाइनमेंट को कास्ट की आवश्यकता नहीं थी। जवाब के लिए धन्यवाद। –

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