0

次のコードを使用しStockRecordて、stockRecordsコレクションに新しいものを追加しています。StockRecord は Stock を拡張します。

for (Stock s : stock) {
     stockRecords.add(new StockRecord(s.get_storeID(),
     s.get_sku(), s.get_itemCount()));
}

と の両方のコンストラクターに println ステートメントがStockありStockRecordます。このコードを実行すると、次の出力が得られます。

Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()

for-each ループで変数を使用するsと、実際に のインスタンスが作成されますStockか?

4

4 に答える 4

3

そうではありません。for ループには Java イテレータを使用します。ループの各反復で、によって返されたオブジェクトに対してIterator.hasNextとが呼び出されます。コレクションは新しいオブジェクトを作成しませんが、カスタム コレクションがある場合は可能です。Iterator.nextstock.iterator()java.util

もう 1 つの可能性は、ゲッターへの呼び出しまたはStockRecordコンストラクター自体の本体でオブジェクトを作成していることです。それらの場所で「新しい」を探します。

于 2012-10-28T17:16:12.090 に答える
2

新しいオブジェクトがインスタンス化されるたびに、その親コン​​ストラクターがそれ自体のコンストラクターの前に呼び出されます(以下同様Object)。StockRecordextendsなので、特定のコンストラクターStockを呼び出すと、指定されたコンストラクターの前に呼び出されます。そのため、これらの印刷ステートメントがこの順序で表示されます。new StockRecordStockStockRecord

于 2012-10-28T17:37:04.440 に答える
1

各反復でStock参照しているのインスタンスは既に存在します。ただし、毎回sの新しいインスタンスを作成しています (これにより、他のクラスの他のインスタンスが作成される場合があります)。StockRecord

于 2012-10-28T17:13:58.473 に答える
0

Stock sコレクション/配列オブジェクトから参照を取得しますstock。オブジェクトは作成されません。

于 2012-10-28T17:13:20.997 に答える