int 和Integer 数组 – 有什么区别?
考虑以下基础知识:
- 任何
Object
只存在于堆上, - 数组IS-A
Object
和 -
Integer
IS-AObject
我发现自己很难回答这么简单的问题: 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之间的区别。