1

重複の可能性:
整数配列はJVMの内部でどのように格納されますか?

C#では、参照型である新しい配列を作成しているときに、スタックにポインターを置き、ヒープ内にオブジェクト自体を配置します。int、などの単純なプリミティブ型を使用してこの配列を作成する場合double、値は、コンテンツが格納されている別のヒープアドレスを指すポインターではなく、ヒープ内の配置された場所に正確に配置されます。

では、Javaでこれがどのように発生するかを誰かに説明してもらえますか?JavaはInteger常に配列で(参照型)を使用しますか、それとも値型をC#のように扱いますか?

int[] hello = new int[5];
hello[0] = 2; // C# put this value directly in same slot and doesn't 
//create a wrapping object.

私は、C#にはないJavaでのラッピングタイプと呼ばれるものを知っています。C#には自動ボクシング機能がInt32ありますが、参照型ではなくValueType、asではなくIntegerオブジェクトintです。を使用して値をボックス化するObject o = 5;か、structに親クラスがある場合は、それを使用してヒープにラップすることもできます(ボックス化)。

4

3 に答える 3

3

Javaは、あなたが説明したものとほとんど同じです。

int[] hello = new int[5]; // reference hello is on stack, the object is on the heap.
hello[0] = 2; // Java puts this value directly in same slot and doesn't 
              // create a wrapping object.
于 2012-05-30T16:59:31.540 に答える
2

Javaプリミティブ配列は、整数などではなく、プリミティブの配列としてヒープに格納されます。格納方法の実際の実装が指定されているとは思わないため、boolean[]はint[]で実装される可能性が非常に高くなりますメモリー

于 2012-05-30T16:58:07.880 に答える
1

Java では、プリミティブ変数またはオブジェクト型を保持するかどうかにかかわらず、配列はオブジェクトと見なされます。Java 配列には、長さと呼ばれるインスタンス変数が 1 つだけあります。

int[] arr = 新しい int[5];

ここで arr はオブジェクト参照配列変数で、メソッドSTACKを使用した場合Inside(つまり as local variable) に格納さButれ、 として使用した場合instance variableは のオブジェクト内に格納されますHeap

于 2012-05-30T18:41:16.833 に答える