int 和Integer 数组 – 有什么区别?

考虑以下基础知识:

  1. 任何Object只存在于堆上,
  2. 数组IS-A Object
  3. Integer IS-A Object

我发现自己很难回答这么简单的问题: JVM中的 int[]Integer[]之间有什么区别吗? 或者仅在“编译时”才有意义?

运行时有所不同。

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

最重要的实际区别: int[]不能保存null值。

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

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

你可以说int是在数组中“包装”的。

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

在此处输入图像描述

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

当你有一个Integer数组时,你实际上有一个对象数组。 int的数组是原始类型的数组。

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

您可能会发现此链接很有帮助。

首先, Integer是一个类/对象,而int是一个基本类型。 Integer是int的包装器 。 如果需要存储值或需要使用集合 ,请使用Integer。 你可以做-

 List integerList = new ArrayList(); 

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

  • Integer []是对象的数组(对象)
  • int []是基元的数组(对象)

这里总结一下 Integer和int之间的区别。