Avatar ·

संयुक्त असाइनमेंट ऑपरेटर +=, -=, *= Java में स्पष्ट टाइप कास्टिंग की आवश्यकता क्यों नहीं रखते?

सभी को नमस्कार! मैंने हाल ही में Java सीखना शुरू किया है और एक अजीब व्यवहार देखा। मान लीजिए, मेरे पास कोड है: ```java int a = 5; long b = 10L; a = a + b; // कंपाइलेशन एरर: incompatible types: possible lossy conversion from long to int ``` यहाँ सब तार्किक है — Java स्पष्ट कास्टिंग चाहता है, क्योंकि `long` `int` से बड़ा हो सकता है। लेकिन अगर मैं संयुक्त ऑपरेटर का उपयोग करूं: ```java int a = 5; long b = 10L; a += b; // बिना एरर के काम करता है! ``` ऐसा क्यों? तर्क के अनुसार `a += b` वही है जो `a = a + b` है। लेकिन कंपाइलर दूसरे विकल्प को बिना कास्टिंग के स्वीकार करता है, हालांकि टाइप्स वही हैं। यह मुझे भ्रमित करता है, क्योंकि मैंने सोचा था कि Java टाइप्स पर सख्ती से ध्यान देता है। कृपया समझाएं, यहाँ क्या रहस्य है? क्या ऐसी स्थितियाँ हैं जहाँ यह डेटा हानि या बग का कारण बन सकता है? <<>>

संयुक्त असाइनमेंट ऑपरेटरों को कास्ट की आवश्यकता क्यों नहीं है?

आप सही हैं — पहली नज़र में यह सख्त टाइपिंग का उल्लंघन लगता है। वास्तव में, यह Java भाषा विनिर्देशन में निहित है।