[Java] जावा का + =, - =, * =, / = यौगिक असाइनमेंट ऑपरेटरों को कास्टिंग की आवश्यकता क्यों नहीं है?


Answers

इस कास्टिंग का एक अच्छा उदाहरण * = या / = का उपयोग कर रहा है

byte b = 10;
b *= 5.7;
System.out.println(b); // prints 57

या

byte b = 100;
b /= 2.5;
System.out.println(b); // prints 40

या

char ch = '0';
ch *= 1.1;
System.out.println(ch); // prints '4'

या

char ch = 'A';
ch *= 1.5;
System.out.println(ch); // prints 'a'
Question

आज तक, मैंने सोचा कि उदाहरण के लिए:

i += j;

सिर्फ एक शॉर्टकट है:

i = i + j;

लेकिन अगर हम इसे आजमाएं तो क्या होगा:

int i = 5;
long j = 8;

फिर i = i + j; संकलित नहीं करेंगे लेकिन i += j; ठीक संकलित करेंगे।

क्या इसका मतलब यह है कि वास्तव में i += j; इस तरह कुछ के लिए शॉर्टकट i = (type of i) (i + j) ?




कभी-कभी, इस तरह के एक प्रश्न से एक साक्षात्कार में पूछा जा सकता है।

उदाहरण के लिए, जब आप लिखते हैं:

int a = 2;
long b = 3;
a = a + b;

कोई स्वचालित टाइपकास्टिंग नहीं है। सी ++ में उपरोक्त कोड को संकलित करने में कोई त्रुटि नहीं होगी, लेकिन जावा में आपको Incompatible type exception तरह कुछ मिल जाएगा।

तो इससे बचने के लिए, आपको अपना कोड इस तरह लिखना होगा:

int a = 2;
long b = 3;
a += b;// No compilation error or any exception due to the auto typecasting



हाँ,

मूल रूप से जब हम लिखते हैं

i += l; 

संकलक इसे बदल देता है

i = (int)(i + l);

मैंने बस .class फ़ाइल कोड की जांच की है।

वास्तव में जानना एक अच्छी बात है




यहां सूक्ष्म बिंदु ...

i+j लिए एक अंतर्निहित टाइपकास्ट है जब j डबल है और i एक int है। जब जावा उनके बीच एक ऑपरेशन होता है तो जावा हमेशा एक पूर्णांक को दोहराता है।

i+=j को स्पष्ट करने के लिए जहां i एक पूर्णांक है और j एक डबल को वर्णित किया जा सकता है

i = <int>(<double>i + j)

देखें: निहित कास्टिंग का यह विवरण

आप इस मामले में स्पष्टता के लिए j (int) टाइप करना चाहते हैं।




यहां समस्या टाइप कास्टिंग शामिल है।

जब आप int और long जोड़ते हैं,

  1. Int ऑब्जेक्ट को लंबे समय तक डाला जाता है और दोनों जोड़े जाते हैं और आपको लंबी वस्तु मिलती है।
  2. लेकिन लंबी वस्तु को अंतर्निहित रूप से int में नहीं डाला जा सकता है। तो, आपको इसे स्पष्ट रूप से करना है।

लेकिन += इस तरह से कोडित किया गया है कि यह कास्टिंग प्रकार करता है। i=(int)(i+m)




Links