ホームページ >Java >&#&チュートリアル >Java 配列型エンコーディングにおける「[Ljava.lang.Object;」」は何を意味しますか?

Java 配列型エンコーディングにおける「[Ljava.lang.Object;」」は何を意味しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-18 19:59:02223ブラウズ

What Does

オブジェクト配列の型エンコーディングを理解する

関数呼び出しからオブジェクトを取得し、その文字列表現を出力するときに、不可解な表記法に遭遇する可能性があります。 「[Ljava.lang.Object;」のように。この謎めいた式はオブジェクトのクラス型を表しますが、その不可解な形式をどのように解読すればよいでしょうか?

クラス型のエンコーディング スキームは Class.getName() で詳しく説明されています。参照型 (配列を除く) の場合、バイナリ名が返されます。プリミティブ型と void には Java キーワードが割り当てられます。ただし、配列の場合、エンコーディングは独自の形式になります。

配列エンコーディング: 分解 [ Ljava.lang.Object; ]

"Ljava.lang.Object;"は、オブジェクトの配列を表す Java クラスの表記法であり、Object[].class とも呼ばれます。命名パターンは次の規則に従います。

  • 要素タイプの名前が最初に記述されます。
  • 配列の場合、要素タイプの前に 1 つ以上の '[' 文字が続きます。ネストの深さを示します。

エンコーディングについて表記法

形式は次のとおりです。

要素タイプ エンコーディング
boolean Z
byte B
char C
double D
float F
int I
long J
short S
クラス またはInterface Lclassname;

デコード例

説明のために、次の例を考えてみましょう。

  • [[[I@xxxxx: これは配列を表します。 3 つのネスト レベルで、次のような整数が含まれます。 elements.
  • [[Ljava.lang.String;@xxxxx: これは、文字列の配列を含む、2 つのネスト レベルを持つ配列を示します。
  • [Z@xxxxx: これは、ブール値を含む配列を表しますelements.

配列がオーバーライドする理由toString()

予想に反して、配列の toString() メソッドは Object クラスの実装から逸脱しています。配列はこのメソッドをオーバーライドしないため、前述の形式で文字列を返します。したがって、次のように指定された Object から継承されたメソッドが呼び出されます:

String.class は次の形式の文字列を返します: getClass().getName() '@' Integer.toHexString(hashCode())

代替の配列文字列表現

java.util.Arrays クラスは、配列のより使いやすい文字列表現を提供します。

  • Arrays.toString(nums): プリミティブ配列と Object[] の場合、要素のカンマ区切りリストが表示されます。
  • Arrays.deepToString(table): 多次元配列の場合、ネストされた表現は次のようになります。

追加の役立つリソース

  • Arrays.equals および Arrays.deepEquals: これらのメソッドは要素ごとに配列が等しいかどうかを比較します。
  • Java Arrays.equals() は 2 次元配列に対して false を返します
  • 効果的Java 2nd Edition、項目 53: リフレクションよりもインターフェイスを優先する

以上がJava 配列型エンコーディングにおける「[Ljava.lang.Object;」」は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。