8

C#の列挙型はスタック上にあるので、Javaのどこで列挙型が作成されたのか疑問に思いました。スタック上?ヒープ上?不思議な他の場所で?

C#の列挙型はJavaの列挙型よりも原始的です。これは、それらがスタック上に作成される理由を説明している可能性があります...

彼らはどこにいる?見つかりません!

ありがとう

4

4 に答える 4

9

Javaの列挙型もオブジェクトです。たとえば、列挙型はインスタンス変数/メソッド/コンストラクターを持ち、インターフェースを実装できます。これらすべてが、jvmによって他のオブジェクトと同じように処理されていると私に思わせます。

于 2010-09-07T16:22:41.180 に答える
6

Java 列挙型は extends java.lang.Enumであるため、他のすべての Java オブジェクトと同様にヒープ上に作成されます。

于 2010-09-07T16:25:13.373 に答える
2

これらは他のオブジェクトと同じようにオブジェクトであるため、列挙型自体がヒープ上にあります。列挙型への参照を保持する変数は、関数変数の場合はスタック上にある場合があり、オブジェクトのメンバーの場合は他のオブジェクト内のヒープ上にある場合があります。

于 2010-09-07T17:11:04.053 に答える
2

列挙型は Java のオブジェクトであるため、ヒープ上にあります。ただし、各タイプには固定数しかありません。クライアント コードはこれらの列挙型オブジェクトへの参照を処理しているため、実際にはヒープ上に何も作成しません。仕様の観点から言えば、ローカル変数の参照はスタック上にあります。オブジェクト フィールド参照はヒープ上にあります。

于 2010-09-07T16:44:42.213 に答える