我想知道两者之间的区别:
Integer I = 30; // is it autoboxing?
Integer I = new Integer(30); // I know it is autoboxing发布于 2013-09-22 15:00:29
在你写的第一行
Integer I = 30;在第一次查看时,您将一个整数(没有显式后缀类型的所有数字文本都视为整数)分配给一个对象,您认为编译器应该抱怨不兼容的类型。但事实并非如此,这就是魔法发生的地方-> auto boxing!编译器自动将整数30放入对象I中,即创建一个保存整数值30的对象,并将其分配给您的引用。
排在队伍里
Integer I = new Integer(30);您可以显式地使用new创建对象。这样就不会给编译器留下任何机会去做任何事情。实际上,是什么让我们确信这是auto boxing?
除此之外,jvm还缓存一系列常量的值,以最小化用于这些常量的内存,从而提高性能。要使用此特性,您应该使用valueOf()方法获取此类对象的实例。在这种情况下,对于相同的整数值,将返回一个唯一对象。如果使用new创建它,那么对于相同的常量,每次都会得到不同的对象。
https://stackoverflow.com/questions/18944999
复制相似问题