2012-02-22 5 views

答えて

17

(それはプリミティブにUnboxのオブジェクトであり、その後、2つの整数を追加し、最終的にIntegerオブジェクトにそれを箱入りのように):

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

あなたはバイトを調べることでこれを確認することができますjavap -cで得られたコード解体。ここ

スタックにINT 2を残し、新しい整数(2).intValue()に相当する部分である:ここ

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(に相当する部分でありますスタックにINT 4を残す):合計2 + 4はiaddで計算され

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 

そしてここで、合計はInteger.valueOf呼び出しによって整数に箱詰めされ、その結果が最初にローカルに格納されます。変数(astore_1):

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

2つのIntegerインスタンスの作成。

これらの2つのインスタンスの自動アンボックス。

new int結果を保持します。

結果をInteger sumインスタンスに自動ボクシングします。

関連する問題