1

解析中[]にこのコードで括弧が正確に何をするのかわかりませんInteger[]new Objects

 private Integer data[]=(Integer[]) new Object[10];//works fine

 private Integer data[]=(Integer) new Object[10];//error
4

6 に答える 6

3

private Integer data[]=(Integer) new Object[10]; //I'm a C programmer :)!

以下と同一です:

private Integer[] data=(Integer) new Object[10];

dataこれで、が の配列であることがよくわかりますInteger

dataの型である場合、左側の変数の型が の場合はキャストInteger[]できません。new Object[10];IntegerInteger[]

于 2013-07-20T10:04:01.180 に答える
2

私はあなたのためにコードを読みます:

ライン1:

  • new Object[10]- Object インスタンスへの 10 個の参照用に新しい配列を作成します。それが完了すると、参照はすべて null になります。
  • (Integer []) ...- Object 参照の配列が実際には Integer 参照の配列、つまり Integer のインスタンスへの参照の配列であると想定する必要があることをコンパイラに伝えます。
  • private Integer data [] = ...- 先ほど作成した配列を data というプライベート参照変数に保持し、data が Integer の配列を参照していると仮定します。

2行目:

  • (Integer)- オブジェクト インスタンスの配列の 1 つの整数参照を作成するようにコンパイラに指示します。配列を 1 つのオブジェクトだけに変換する方法がないため、これは実行できません。

総括する:

X []内の括弧は、 Xへの参照の配列を示します。

そして、(Y) foo読み取りは、実際には foo がタイプ Y のインスタンスであると想定します

于 2013-07-20T10:14:45.320 に答える
0

data最初のケースで配列のインスタンスを作成しようとしています。しかし、2番目のケースでは、配列でIntegerあることが期待されているのに、配列を割り当てようとしています。

于 2013-07-20T10:05:54.477 に答える
0

変数の型dataInteger[](整数の配列) です。配列を宣言する従来のスタイルを使用すると、より明確になります。

private Integer[] data = ...

したがって、最初の行は式を変数の型 ( Integer[]) にキャストしますが、2 行目Integerは式を の型ではない にキャストするdataため、コンパイル エラーが発生します。

2 行目はコンパイルされますが、あまり意味がないことに注意してください。単に使用する必要があります

private Integer[] data = new Integer[10];
于 2013-07-20T10:06:04.133 に答える
0

割り当てを可能にするために、オブジェクトの配列を整数の配列にキャストしています。

于 2013-07-20T10:06:25.477 に答える
0

オブジェクトの配列はキャストしInteger[]ないようにする必要がありますInteger

于 2013-07-20T10:05:01.300 に答える