我这里有一个非常愚蠢的问题。当我们将一个int值添加到ArrayList时,它是否会创建该int值的新Integer对象? 例如:
int a = 1;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(a);
在上面的代码中,&#39; a&#39;是一种原始类型,其值为1,列表&#39;是一个包含整数类型元素的arraylist。所以当添加&#39; a&#39;要列出&#39;,如何列出&#39;对待&#39; a&#39;作为整数?
答案 0 :(得分:0)
a
autoboxed为Integer
。从链接
Autoboxing 是Java编译器在基元类型及其相应的对象包装类之间进行的自动转换。
答案 1 :(得分:0)
是否创建了新的Integer
对象取决于添加int
时的值。 JVM具有覆盖一系列常用值的预制对象缓存,如果值在该范围内,它将使用现有的缓存对象而不是创建新对象。
对于int
类型,the Java language specification要求此缓存覆盖-128到127(含)之间的所有数字。 JVM实现可以包含此缓存中的其他值,也可以不包含其他值。
答案 2 :(得分:0)
在
int a = 1;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(a);
编译器自动将最后一行转换为:
list.add(Integer.valueOf(a));
Integer.valueOf
是一种方法,可以创建具有相同值的新Integer
对象,也可以重用已存在的对象。结果对象与变量a
无关,除了它表示相同的值。