2

私はエントリーレベルの Oracle 認定 - OCA - Java Programmer I の準備をしています。これは、次の認定を受ける前にこの認定を受ける必要があるためです (以前は、OCP - Java Programmer と同等の SCJP を直接受けることができました)。 Ⅱ)

配列の初期化に関するこの質問に出くわしたので、少し戸惑いました。明らかに、次のように配列を宣言して初期化できます。

Object[] objects = { new Object[1], new Object[34] };

配列はオブジェクトであるため、オブジェクト配列をオブジェクト配列に貼り付けることができます。objects[0]またはを実行することで、どちらか一方のオブジェクト配列に簡単にアクセスできobjects[1]ますが、そこからどこに行くのでしょうか? に格納されているオブジェクト配列から、たとえば 16 番目のオブジェクトにどのようにアクセスしますobjects[1]か?

基本的に、私の質問は次のように単純化できます。

Object o = new Object[100];

上記がコンパイルされます。ただし、 Object 配列内の個々のオブジェクトにどのようにアクセスしますoか?

4

2 に答える 2

10

AnObject[]Objectです。そのため、あなたの宣言は

Object o = new Object[100];

動作します。*ただし、要素にアクセスするには、 にキャストし直す必要がありますObject[]。例えば:

Object elt = ((Object[]) o)[3];

元の宣言の場合:

Object[] objects = { new Object[1], new Object[34] };

の 16 番目の要素にアクセスするには、同様のことを行う必要がありますobjects[1]

Object elt = ((Object[]) (objects[1]))[15];

もちろん、次のように宣言することで、このキャストをすべて回避できます。

Object[][] objects = { new Object[1], new Object[34] };

そもそも。その後、あなたはただ行うことができますobjects[1][15].

*Objectこれは、Java のオブジェクト階層のルートとして特別な地位を持つのみに当てはまることに注意してください。を変数に代入するInteger[]ことはできません。Integer

于 2013-03-19T15:50:08.790 に答える
5

あなたはそれをにキャストバックする必要がありますObject[]

    Object o = new Object[] {new String("abc"), null, new Integer(1)};
    Object[] arr = (Object[]) o;
    Object elem = arr[0];
    System.out.println(elem);

これは印刷しabcます。

System.out.println()取って幸せなので動作しObjectます。が必要な場合はString、別のダウンキャストが必要になります。

于 2013-03-19T15:49:53.133 に答える