जैसा कि पहले से ही कहा गया है, + = का एक निहित कलाकार है। यह स्पष्ट करने में सहायता के लिए, मैं एक ऐप का उपयोग करने जा रहा हूं जिसे मैंने कुछ समय पहले लिखा था जो इस प्रकार के प्रश्नों के लिए बिल्कुल सही है। http://javabytes.herokuapp.com/
और उनके अर्थ की एक तालिका: http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
तो चलो कुछ सरल जावा कोड से बाईटकोड पर एक नज़र डालें:
यह तो आप वास्तविक बाईटकोड कि उत्पादन किया जा रहा है की जाँच कर सकते हैं एक ऑनलाइन disassembler है
int i = 5;
long j = 8;
i += j;
डिस्सेबल कोड। मेरी टिप्पणियों के सामने // // होगा।
Code:
0: iconst_5 //load int 5 onto stack
1: istore_0 //store int value into variable 0 (we called it i)
2: ldc2_w #2; //long 8l
//load long 8 value onto stack. Note the long 8l above
//is not my comment but how the disassembled code displays
//the value long 8 being used with the ldc2_w instruction
5: lstore_1 //store long value into variable 1 (we called it j)
6: iload_0 //load int value from variable 0
7: i2l //convert int into a long. At this point we have 5 long
8: lload_1 //load value from variable 1
9: ladd //add the two values together. We are adding two longs
//so it's no problem
10: l2i //THIS IS THE MAGIC. This converts the sum back to an int
11: istore_0 //store in variable 0 (we called it i)
क्या आप आगे पढ़ने के लिए उस पर कुछ लिंक प्रदान कर सकते हैं? धन्यवाद – hhafez
मुझे लगता है कि "गहरा" कारण यह है क्योंकि इसे संकुचित करते समय असाइन करने की अनुमति नहीं है: बाइट = int अस्वीकृत है और int = double भी है। क्या कोई एक साधारण बाइट एक करेगा; एक + = 2; और संकलन करने में विफल, लोग जावा में जूते फेंक देंगे। लेकिन मुझे अभी भी अतिरिक्त नियम पसंद आएंगे जो इसे बिना कलाकार के काम करते हैं :( –
मुझे यकीन नहीं है कि एक गहरा कारण है, लेकिन जावा भाषा विनिर्देश स्पष्ट रूप से निहित कलाकार को परिभाषित करता है: http://java.sun.com/ दस्तावेज़/पुस्तकें/jls/second_edition/html/expressions.doc.html # 5304 – DefLog