2

クラスではない場合、整数配列のようなプリミティブデータ型にフィールド「長さ」を持たせるにはどうすればよいですか? 例えば

int a[] = {1,2,3,4};
int j = a.length;
System.out.println(j);
4

3 に答える 3

8

簡単: 配列はプリミティブではありません。むしろ、それらは参照型のオブジェクトです。

これを体験するもう 1 つの方法は、int の配列をメソッドに渡し、メソッド内から配列の内容を変更するとどうなるかを確認することです。参照型 (非プリミティブ) のすべての変数に起こるように、これにより元の配列オブジェクトも変更されることがわかります。

于 2012-05-19T13:21:14.863 に答える
3

クラスではない場合、整数配列のようなプリミティブデータ型にフィールド「長さ」を持たせるにはどうすればよいですか?

他の回答では、配列は Java のプリミティブ データ型ではないことが説明されています。

配列型はクラスとして宣言されていませんが、多くの点でクラスにています。例えば:

  • すべての配列型はjava.lang.Object暗黙のスーパークラスとして、
  • 配列インスタンスは参照によって示され、(ほとんどの場合) 状態を保持できます。
  • 配列型にはメソッドがあります。すなわち、によって宣言されたメソッドObject、および
  • getClass()配列インスタンスを呼び出してそのClassオブジェクトを取得できます。

これらについて考えると、配列が配列のサイズを保持する状態を持つことは、意味的に矛盾していません。


Java 言語の設計者は、配列の長さは、length型がと呼ばれる読み取り専用フィールドとしてモデル化する必要があると判断しましたint。それが (言語構文によると) どのように見えるかであり、それがどのように動作するかです。

「長さ」フィールドの「違い」は、実装レベルでのみ明らかです。

  • フィールドは、length配列オブジェクトのオブジェクト ヘッダーで表されます。
  • 配列オブジェクトの長さにアクセスするための特別なバイトコードがあります (ARRAYLENGTH - バイトコード 190)
于 2012-05-19T14:08:55.783 に答える
0

配列は参照型のオブジェクトであり、プリミティブではありません。

于 2012-05-19T13:36:54.180 に答える