int []和Integer []数组 - 有什么区别?

时间:2013-09-17 08:49:47

标签: java arrays integer int

考虑以下基础知识:

  1. 任何Object仅存在于堆上,
  2. 数组IS-A Object
  3. Integer IS-A Object
  4. 我发现自己很难回答这么简单的问题:JVM中的int[]Integer[] 之间是否存在差异?或者仅在“编译时”才有意义?

4 个答案:

答案 0 :(得分:20)

运行时存在差异。

int[]是一个原始int值的数组。 Integer[]是一个“对象”数组,保存对Integer对象的引用。

最重要的实际差异:int[]无法保留null值。

  

但我仍然感到困惑:int[]只存储原始值吗?如果是这样 - 这不是说原始类型可以在没有被包装的情况下存在于堆上吗?

int[]存储基本类型。阵列本身就存在于堆中。但是,这些原语被分配为数组的一部分。它们不会单独存储在堆上的其他位置。这与原始字段是对象实例的一部分非常相似:对象在堆上,其字段是该对象的组成部分(而对于非原始字段,只有引用存储在对象内部)并且引用点的目标实例分别存储在堆上。

你可以说int被“包裹”在数组中。

答案 1 :(得分:6)

此图片可以帮助您了解差异:

enter image description here

int数字,它是原始类型
Integer对象

当你有一个Integer数组时,你实际上有一个对象数组int s数组是一个基本类型数组。

由于数组是对象,因此它们在堆上分配。如果它是int的数组,那么这些int也将在数组中分配在堆上。

您可能会发现this link有帮助。

答案 2 :(得分:1)

首先,Integer是一个类/对象,而int是一个基本类型。对于int,整数是wrapper。如果需要存储 null 值,或者需要使用collection,请使用Integer。你可以做 -

List<Integer> integerList = new ArrayList<Integer>();

因此,基本类型数组与整数对象数组不同。

答案 3 :(得分:1)

  • Integer []是对象的数组(对象)
  • int []是一个数组(对象) 原语

与Integer和int summarized here之间存在差异。