プロが教えるわが家の防犯対策術!

配列クラスのクラス名

配列クラスのクラス名を教えてください。
配列はクラスですよね。そこまでは分かります。

こんなコードを実行しましたが
System.out.println((new int[0]).getClass());
System.out.println((new boolean[0]).getClass());
System.out.println((new String[0]).getClass());
System.out.println((new Integer[0]).getClass());

親切にこのような結果を出力してくれます。
class [I
class [Z
class [Ljava.lang.String;
class [Ljava.lang.Integer;

結果として配列が何というクラスなのかは分かりません。
(もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?)

昔Javaのソースを読んだときに、配列クラスのファイルも
読んだことがあるような気がするのですが、
なんと言うクラスだったか忘れてしまいました。

パッケージ名+クラス名を教えてください。

よろしくお願いします。

A 回答 (3件)

配列は参照型であり、オブジェクトとして扱われますが


クラスではないです。
だからパッケージ名もクラス名もありません。

All the components of an array have the same type, called the component type of the array. If the component type of an array is T, then the type of the array itself is written T[].

http://java.sun.com/docs/books/jls/third_edition …

内部的な詳しい処理までは書かれていませんが
Every array has an associated Class object, shared with all other arrays with the same component type.
とあるので、
実際にはClassオブジェクトによって型を管理しているのではないでしょうか。

> (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?)

the string "[I" is the run-time type signature for the class object "array with component type int".

上記の通り、『[I』『[Z』『[L』というのは
実行時型を表すシグネチャです。
    • good
    • 0
この回答へのお礼

「クラスと同じ扱いをする」というだけで
実態がきちんとあるクラスとは違うということなのですかね。
なんとなく分かりました。
参考になりました。ありがとうございました。

お礼日時:2010/04/30 12:36

int, booleanはプリミティブ型であって、クラスではありません。


ですから、厳密にはI,Zといった名前のクラスがある訳ではありません。

I,Zといった文字に対応したエンティティについては、参考URLを参照して下さい。

参考URL:http://java.sun.com/javase/ja/6/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

符号化の各値の意味がきちんと分かりました。
参考になりました。ありがとうございました。

お礼日時:2010/04/30 12:41

> もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?



そのとおりです。
"["が配列を表し、それに続く文字が要素の型を表します。intは"I"、booleanは"Z"、byteは"B"など。クラスの配列の場合は"L"+クラス名+";"となります。longの二重配列なら"[[J"のようになります。
パッケージ名はありません。
    • good
    • 0
この回答へのお礼

「クラス名」では無かったみたいです。
しかしご回答ありがとうございました。

お礼日時:2010/04/30 12:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!