2012-02-22 29 views
11

क्या कोई मुझे जावा में दो इंटीजर ऑब्जेक्ट्स जोड़ने पर आंतरिक व्यवहार कैसे समझा सकता है? (जैसे कि यह पुरातन में Unbox वस्तु है और उसके बाद दो पूर्णांकों जोड़ सकते हैं और अंत में पूर्णांक वस्तु में यह बॉक्सिंग)जब हम दो इंटीजर ऑब्जेक्ट्स जोड़ते हैं तो ऑपरेशन अंदर?

Integer sum = new Integer(2) + new Integer(4); 

उत्तर

17

यह इस में संकलित किया है:

Integer sum = Integer.valueOf(new Integer(2).intValue()+new Integer(4).intValue()); 

आप बाइट को देखकर यह सत्यापित कर सकते हैं javap -c के साथ प्राप्त कोड disassembly।

यहाँ, बात यह है कि नई पूर्णांक (2) .intValue() से मेल खाती है है स्टैक पर पूर्णांक 2 छोड़ने:

0: new #2; //class java/lang/Integer 
3: dup 
4: iconst_2 
5: invokespecial #3; //Method java/lang/Integer."<init>":(I)V 
8: invokevirtual #4; //Method java/lang/Integer.intValue:()I 

यहाँ बात यह है कि नई पूर्णांक (4) .intValue से मेल खाती है (है), ढेर पर पूर्णांक 4 छोड़ने:

11: new #2; //class java/lang/Integer 
14: dup 
15: iconst_4 
16: invokespecial #3; //Method java/lang/Integer."<init>":(I)V 
19: invokevirtual #4; //Method java/lang/Integer.intValue:()I 

और यहाँ योग 2 + 4 iadd साथ गणना की जाती है, योग एक पूर्णांक में एक कॉल द्वारा Integer.valueOf को बॉक्सिंग जाता है, और परिणाम पहले स्थानीय में संग्रहित है परिवर्तनीय (astore_1):

22: iadd 
23: invokestatic #5; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
26: astore_1 
0

दो Integer उदाहरणों का निर्माण।

उन दो उदाहरणों के ऑटो-अनबॉक्सिंग।

नया int जो परिणाम धारण करता है।

ऑटो-मुक्केबाजी परिणाम Integer sum उदाहरण में परिणाम।

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