クラスではない場合、整数配列のようなプリミティブデータ型にフィールド「長さ」を持たせるにはどうすればよいですか? 例えば
int a[] = {1,2,3,4};
int j = a.length;
System.out.println(j);
簡単: 配列はプリミティブではありません。むしろ、それらは参照型のオブジェクトです。
これを体験するもう 1 つの方法は、int の配列をメソッドに渡し、メソッド内から配列の内容を変更するとどうなるかを確認することです。参照型 (非プリミティブ) のすべての変数に起こるように、これにより元の配列オブジェクトも変更されることがわかります。
クラスではない場合、整数配列のようなプリミティブデータ型にフィールド「長さ」を持たせるにはどうすればよいですか?
他の回答では、配列は Java のプリミティブ データ型ではないことが説明されています。
配列型はクラスとして宣言されていませんが、多くの点でクラスに似ています。例えば:
java.lang.Object
暗黙のスーパークラスとして、Object
、およびgetClass()
配列インスタンスを呼び出してそのClass
オブジェクトを取得できます。これらについて考えると、配列が配列のサイズを保持する状態を持つことは、意味的に矛盾していません。
Java 言語の設計者は、配列の長さは、length
型がと呼ばれる読み取り専用フィールドとしてモデル化する必要があると判断しましたint
。それが (言語構文によると) どのように見えるかであり、それがどのように動作するかです。
「長さ」フィールドの「違い」は、実装レベルでのみ明らかです。
length
配列オブジェクトのオブジェクト ヘッダーで表されます。配列は参照型のオブジェクトであり、プリミティブではありません。