În primul caz, se întâmplă o conversie lărgită. Acest lucru poate fi văzut când se execută programul utilitar "javap" (inclus cu w / JDK), pe clasa compilată:
public static void main(java.lang.String[]);
Code:
0: iconst_ 5
1: istore_ 1
2: iload_ 1
3: i2l
4: invokestatic #6; //Method hello:(J)V
7: return
}
În mod evident, vedeți I2L, care este mnemonica pentru lărgirea instrucțiunii bytecode Integer-To-Long. Vedeți referința aici .
În celălalt caz, înlocuind semnul "long x" cu obiectul "Long x", veți avea acest cod în metoda principală:
public static void main(java.lang.String[]);
Code:
0: iconst_ 5
1: istore_ 1
2: iload_ 1
3: invokestatic #6; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
6: invokestatic #7; //Method hello:(Ljava/lang/Integer;)V
9: return
}
Deci, veți vedea că compilatorul a creat instrucțiunea Integer.valueOf (int), pentru a plasa elementul primitiv în interiorul ambalajului.