向ArrayList

时间:2016-03-14 02:09:53

标签: java arraylist

我这里有一个非常愚蠢的问题。当我们将一个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;作为整数?

3 个答案:

答案 0 :(得分:0)

a autoboxedInteger。从链接

  

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无关,除了它表示相同的值。