2012-02-22 15 views

Respuesta

17

Se compila en esto:

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

Usted puede verificar esto buscando en el byte Desmontaje del código obtenido con javap -c.

Aquí es la parte que corresponde a new Integer (2) .intValue(), dejando int 2 en la pila:

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 

Aquí es la parte que corresponde a new Integer (4) .intValue (), dejando int 4 en la pila:

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 

y aquí la suma de 2 + 4 se calcula con iadd, la suma se encajona en un entero por una llamada a Integer.valueOf, y el resultado se almacena en el primer locales variable (astore_1):

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

creación de dos instancias Integer.

Auto-unboxing de esas dos instancias.

nuevo int que tiene el resultado.

Auto-boxing el resultado en instancia Integer sum.

Cuestiones relacionadas