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

Ily*_*rev 9 java arrays int integer

考虑以下基础知识:

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

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

Thi*_*ilo 22

运行时有所不同.

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

最重要的实际差异:int[]无法掌握null价值观.

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

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

你可以说它int是在数组中"包裹"的.


Mar*_*oun 6

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

在此输入图像描述

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

当你有一个Integers 数组时,你实际上有一个对象数组.的阵列ints是原始类型的阵列.

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

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