如有疑问,请检查字节码:
Integer n = 42;
变成:
0: bipush 422: invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;5: astore_1
因此,实际上,它
valueOf()是与构造函数相对使用的(其他包装类也是如此)。这是有益的,因为它允许缓存,并且不会在每次装箱操作时强制创建新对象。
反之则如下:
int n = Integer.valueOf(42);
变成:
0: bipush 422: invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;5: invokevirtual #22 // Method java/lang/Integer.intValue:()I8: istore_1
即
intValue()使用(同样,它也与其他包装类型类似)。这实际上是所有自动装箱归结为。
你可以分别在JLS§5.1.7和JLS§5.1.8中了解装箱和拆箱转换。



