【问题标题】:When adding an integer to ArrayList向 ArrayList 添加整数时
【发布时间】:2016-06-28 22:55:08
【问题描述】:

我在这里有一个非常愚蠢的问题。当我们向 ArrayList 添加一个 int 值时,它会创建一个具有该 int 值的新 Integer 对象吗? 例如:

int a = 1;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(a);

在上面的代码中,'a' 是一个值为 1 的原始类型,'list' 是一个包含整数类型元素的数组列表。那么在将'a'添加到'list'时,'list'如何将'a'视为Integer?

【问题讨论】:

标签: java arraylist


【解决方案1】:

aautoboxedInteger。从链接,

Autoboxing 是 Java 编译器在基本类型与其对应的对象包装类之间进行的自动转换。

【讨论】:

  • 所以编译器会在堆中创建一个新对象,它与变量a没有关系,对吗?
  • 不管是否创建了新对象(byte 范围内的值必须有缓存),intValue() 将等于 a,因此它们是相关的。而且,如果未装箱,则该值也将等于 a
【解决方案2】:

是否创建新的Integer 对象取决于添加int 时的值。 JVM 有一个预制对象缓存,涵盖了一系列常见值,如果该值在该范围内,它将使用现有的缓存对象而不是创建新对象。

对于int 类型,the Java language specification 要求此缓存覆盖从 -128 到 127(含)的所有数字。 JVM 实现可能会或可能不会在此缓存中包含其他值,由其选择。

【讨论】:

  • 感谢您的回答
【解决方案3】:

int a = 1;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(a);

最后一行被编译器自动转换成:

list.add(Integer.valueOf(a));

Integer.valueOf 是一种创建具有相同值的新 Integer 对象或重用已存在的对象的方法。结果对象与变量a 没有任何关系,只是它表示相同的值。

【讨论】:

  • 谢谢你的回答,这有助于我理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多