5

クラスにAと言い、このクラスの10個の要素の配列を次のように宣言するとします。

A [] arr=new A[10];

次に、Aの10個の新しいオブジェクトが作成され、配列に格納されます。

A arr[10];ただし、配列がnullオブジェクトへの参照を保持しているだけの行で何かを実行できるようにしたいと思います。

これが必要な理由は、コードの後半で入力するインスタンスを保持するための配列のみが必要だからです。したがって、上記のステートメントが作成するオブジェクトはとにかく失われ、私が理解しているように、オブジェクトの作成には費用がかかります。

それで、後で必要なオブジェクトを指すことができる参照の配列を作成する方法はありますか?または、これは不可能であり、私は?を使用することに頼るべきArrayListですか?

4

4 に答える 4

13

というクラスがAあり、このクラスの 10 個の要素の配列を次のように宣言するとします。

A [] arr=new A[10];

次に、A の 10 個の新しいオブジェクトが作成され、配列に格納されます。

それは正しくありません。ここでは、10 個の参照の配列が作成され、各参照が に設定されnullます。Aこのコードによって作成されたのインスタンスはありません。

言い換えれば、コードはすでにあなたがやりたいことを正確に実行しています。

于 2013-02-25T10:08:21.030 に答える
4

そうする場合A [] arr=new A[10];、配列以外のオブジェクトは作成されず、各フィールドはnull初期化されるまで残ります。

A [] arr=new A[10];AClass オブジェクトの参照を格納する場所のみを作成します。配列arrは作成されますが、オブジェクトを参照していないため、好きなことはできませんarr[i].someMethod()

これを修正するには、次のように配列内の個々のメモリにオブジェクトを割り当てます。

A [] arr=new A[10];
arr[0] = new A();
arr[1] = new A();
:
:

または次のようなループで:

  for(i=0; i<10; i++){
      arr[i] = new A();
  }

その後arr、参照の配列があり、有効な A クラス オブジェクトを参照します。そして、この式の後arr[i].someMethod()はエラーになりません。

于 2013-02-25T10:08:23.397 に答える
1

JLS の種類の変数から:

配列コンポーネントは、配列である新しいオブジェクトが作成されるたびに作成され、デフォルト値に初期化される名前のない変数です ( §4.12.5 ) ( §10§15.10 )。配列が参照されなくなると、配列コンポーネントは実質的に存在しなくなります。

そして4.12.5から。変数の初期値

すべての参照型 (§4.3) で、デフォルト値はnullです。

あなたが言うように:

A というクラスがあり、このクラスの 10 個の要素の配列を
A [] arr=new A[10];として宣言するとします。
次に、A の 10 個の新しいオブジェクトが作成され、配列に格納されます。

それは正しくありません。しかし、あなたが望むものは正しいです。

それで、後で必要なオブジェクトを指すことができる参照の配列を持つ方法はありますか?

于 2013-02-25T10:19:45.620 に答える