0

我正在使用以下代码向StockRecord我的stockRecords收藏添加一个新的。StockRecord 扩展了 Stock。

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

我在 和 的构造函数中有一个 printlnStock语句StockRecord。当我运行此代码时,我得到以下输出:

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

在 for-each 循环中使用变量s实际上会创建一个实例Stock吗?

4

4 回答 4

3

它不是。For 循环使用 java 迭代器。在循环的每次迭代中,Iterator.hasNext并在由 .Iterator.next返回的对象上调用stock.iterator()java.util集合不会创建新对象,但如果您有自定义集合,它可能会。

另一种可能性是您在对 getter 的调用或在StockRecord构造函数本身的主体中创建对象。在那些地方寻找“新”。

于 2012-10-28T17:16:12.090 回答
2

每当实例化一个新对象时,它的父构造函数都会在其自己的构造函数之前被调用(依此类推直到Object)。由于StockRecordextends Stock,当你调用new StockRecord某个Stock构造函数时,会在指定StockRecord构造函数之前调用。这就是为什么您会看到这些打印语句并按顺序排列。

于 2012-10-28T17:37:04.440 回答
1

Stocks在每次迭代中引用的实例已经存在。StockRecord但是,您每次都创建一个新实例(这可能反过来创建其他类的其他实例)。

于 2012-10-28T17:13:58.473 回答
0

Stock s从集合/数组对象中获取引用stock。它不会创建任何对象。

于 2012-10-28T17:13:20.997 回答