【发布时间】:2013-09-21 14:56:22
【问题描述】:
考虑以下基础:
- 任何
Object都只存在于堆中, - 阵列 IS-A
Object和 -
IntegerIS-AObject
我发现自己很难回答这么简单的问题:int[] 和Integer[] JVM 内部 之间有什么区别吗?还是仅在“编译时”才有意义?
【问题讨论】:
考虑以下基础:
Object 都只存在于堆中,Object 和Integer IS-A Object
我发现自己很难回答这么简单的问题:int[] 和Integer[] JVM 内部 之间有什么区别吗?还是仅在“编译时”才有意义?
【问题讨论】:
在运行时存在差异。
int[] 是一个原始 int 值数组。 Integer[] 是一个“对象”数组,包含对 Integer 对象的引用。
最重要的实际区别:int[] 不能保存 null 值。
但我仍然感到困惑:
int[]是否只存储原始值?如果是这样 - 这是否意味着原始类型可以存在于堆上而不被包装?
int[] 确实存储原始类型。并且数组本身存在于堆上。但是,这些原语被分配为数组的一部分。它们不会单独存储在堆的其他地方。这与原始字段如何成为对象实例的一部分非常相似:对象位于堆上,并且其字段是该对象的组成部分(而对于非原始字段,只有引用存储在对象内部并且引用指向的目标实例单独存储在堆上)。
您可以说int 被“包裹”在数组中。
【讨论】:
首先,Integer 是一个类/对象,而int 是一个原始类型。整数是一个 wrapper 用于 int。如果您需要存储一个 null 值,或者需要使用 collection,请使用 Integer。你可以做-
List<Integer> integerList = new ArrayList<Integer>();
因此,原始类型数组不同于整数对象数组。
【讨论】:
Integer 和 int summarized here 是有区别的。
【讨论】: