0

Obj彼のコンストラクターにあるクラスを持っているSystem.out.println("Hello world!") ;

このクラスの配列は、-を使用して作成しますが、Obj[] objArray = new Obj[10] ; 何も出力されません。つまり、-のインスタンスはObj呼び出されていません。そのような配列を作成する方法はありますが、インスタンスを使用して、forループで作成する以外に方法はありますか?

4

4 に答える 4

3

さて、forループを使用する以外の方法を知りたいので、これを行うことができます:-

Obj[] objArray = {new Obj(), new Obj(), new Obj()};

ここで何が起こるかというと、配列要素を使用して配列参照を直接初期化しているということです。これで、実際の配列オブジェクトのタイプは、LHSの配列参照のタイプから推測されます。

したがって、その宣言を使用して、サイズ3(上記の場合)の配列が作成され、配列内の各インデックスは、指定された順序でinstanceofObjクラスで初期化されます。


私が提案するより良い方法は、を使用することですArrayList。この場合、forループなしでdouble-braces initialization初期化する必要があります。Listさらに、いつでも新しい要素を追加できるという利点があります。dynamically increasing配列として。

List<Object> list = new ArrayList<Object>() {
    {
        add(new Obj());
        add(new Obj());
        add(new Obj());
    }
};  // Note the semi-colon here.

list.add(new Obj());  // Add another element here.
于 2012-11-24T20:56:46.807 に答える
3

これまでの回答は適切で役に立ちます。私はあなたに思い出させるためにここにいます

Obj[] objArray = new Obj[10];
Arrays.fill(objArray, new Obj());

ただし、これは配列のすべての要素に (新しい Obj() への) 1 つの参照のみを割り当てます。

于 2012-11-24T21:02:23.147 に答える
1

Obj[] objArray = new Obj[10] ; 実際の「Obj」オブジェクトを指す参照の配列のみを作成します。

しかし、あなたの場合、実際の Obj オブジェクトは作成されません。

for (int i = 0; i < objArray.length; i++) {
objArray[i] = new Obj();
}

上記を行うと、目的のものが印刷されます。

最後に、すべてのSystem.out.println(Arrays.deepToString(objArray))印刷を行いますtoString()Obj

于 2012-11-24T20:59:18.027 に答える
1

Obj[] objArray = new Obj[10] ;10 個の Objs を保持できる配列を作成するだけです。Objs を配列に配置するには、Rohit のアプローチを使用するか、単純なforループを記述して配列エントリを一度に 1 つずつ初期化する必要があります。

for (int i = 0; i < 10; i++) {
    objArray[i] = new Obj();
}

または、for ループなし:

int i = 0;
while (i < 10) {
    objArray[i] = new Obj();
    i++;
}
于 2012-11-24T20:59:36.293 に答える