次の基本を考慮します。
- ヒープ
Object
のみで生活し、 - アレイ IS-A
Object
および Integer
IS-AObject
このような単純な質問に答えるのは難しいと思います. JVMint[]
との間に違いはありますか? それとも「コンパイル時」にのみ意味がありますか?Integer[]
実行時に違いがあります。
int[]
プリミティブな int 値の配列です。Integer[]
整数オブジェクトへの参照を保持する「オブジェクト」配列です。
最も重要な実際の違い:値int[]
を保持できませんnull
。
しかし、私はまだ混乱しています:
int[]
プリミティブ値だけを保存しますか? もしそうなら、プリミティブ型はラップされずにヒープ上で生きていけるということではないですか?
int[]
プリミティブ型を格納します。そして、配列自体はヒープ上に存在します。ただし、これらのプリミティブは配列の一部として割り当てられます。それらは、ヒープの別の場所に個別に保管されることはありません。これは、プリミティブ フィールドがオブジェクト インスタンスの一部であることに非常に似ています。オブジェクトはヒープ上にあり、そのフィールドはそのオブジェクトの不可欠な部分です (一方、非プリミティブ フィールドの場合、参照のみがオブジェクト内に格納されます)。参照先のターゲット インスタンスは、ヒープに個別に格納されます)。
int
配列内に「ラップ」されていると言えます。
Integer と int の違いはこちらにまとめられています。