10

次の基本を考慮します。

  1. ヒープObjectのみで生活し、
  2. アレイ IS-AObjectおよび
  3. IntegerIS-AObject

このような単純な質問に答えるのは難しいと思います. JVMint[]との間に違いはありますか? それとも「コンパイル時」にのみ意味がありますか?Integer[]

4

4 に答える 4

25

実行時に違いがあります。

int[]プリミティブな int 値の配列です。Integer[]整数オブジェクトへの参照を保持する「オブジェクト」配列です。

最も重要な実際の違い:値int[]を保持できませんnull

しかし、私はまだ混乱しています:int[]プリミティブ値だけを保存しますか? もしそうなら、プリミティブ型はラップされずにヒープ上で生きていけるということではないですか?

int[]プリミティブ型を格納します。そして、配列自体はヒープ上に存在します。ただし、これらのプリミティブは配列の一部として割り当てられます。それらは、ヒープの別の場所に個別に保管されることはありません。これは、プリミティブ フィールドがオブジェクト インスタンスの一部であることに非常に似ています。オブジェクトはヒープ上にあり、そのフィールドはそのオブジェクトの不可欠な部分です (一方、非プリミティブ フィールドの場合、参照のみがオブジェクト内に格納されます)。参照先のターゲット インスタンスは、ヒープに個別に格納されます)。

int配列内に「ラップ」されていると言えます。

于 2013-09-17T08:51:59.380 に答える
8

この画像は違いを理解するのに役立ちます:

ここに画像の説明を入力

int数値で、プリミティブ型です。
Integerオブジェクトです。

の配列があるInteger場合、実際にはobjectの配列があります。s の配列intは、プリミティブ型の配列です。

配列はオブジェクトであるため、ヒープに割り当てられます。sの配列の場合int、これらintの s も配列内のヒープに割り当てられます。

このリンクが役立つ場合があります。

于 2013-09-17T08:59:31.803 に答える
1
  • Integer[] はオブジェクトの配列 (オブジェクト) です
  • int[] はプリミティブの配列 (オブジェクト) です

Integer と int の違いはこちらにまとめられています

于 2013-09-17T08:56:17.870 に答える